Cỏc toỏn tử và biểu thức

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 34)

IV.1 Cỏc toỏn tử và thứ tự ưu tiờn

Cỏc toỏn tử thường sử dụng: { Block 1 } { Block 2 } { Block 3 }

Toỏn tử í ngh aĩ Vớ dụ = Gỏn x=10 != so sỏnh khỏc x!=5 > so sỏnh l n h nớ ơ x>5 < so sỏnh nh h nỏ ơ x<20 >= l n h n ho c b ngớ ơ ặ ằ x>=10 <= nh h n ho c b ngỏ ơ ặ ằ x<=10 + c ngộ y=x+1 - trừ y=x-1 * Nhõn y=x*3 / Chia y=x/3 % L y ph n dấ ầ ư 10%3 = 1 ++ t ng giỏ tr lờn 1ă ị x++ -- gi m giỏ tr i 1ả ị đ x--

+= c ng k t h p phộp gỏnộ ế ợ x+=y tươ đương ng x=x+y -= tr k t h p phộp gỏnừ ế ợ x-=y tươ đương ng x=x-y *= nhõn k t h p phộp gỏnế ợ x*=y tươ đương ng x=x*y /= chia k t h p phộp gỏnế ợ x/=y tươ đương ng x=x/y

^ phộp XOR trờn bit x ^ y

| phộp OR trờn bit x | y

& phộp và trờn bit ! Toỏn t logic NOTử && Toỏn t logic ANDử || Toỏn t logic ORử = = So sỏnh b ng nhauằ

Thứ tự ưu tiờn:

( ), *, /, %, +, -,= =, !=, &, ^, |, &&, ||, =, %=, /=, *=, -=, +=

IV.2 Biểu thức

Biểu thức là sự kết hợp cỏc biến số, cỏc giỏ trị bởi cỏc toỏn tử hoặc cú thể là một phộp gỏn giỏ trị một biểu thức cho một biến số.

Vớ dụ: (x+3)/(y-2);

Cú 3 loại biểu thức chớnh là:

• Biểu thức số liờn kết cỏc biến số, cỏc hằng bằng cỏc phộp toỏn số, kết quả là một giỏ trị số.

• Biểu thức gỏn dựng để gỏn giỏ trị cho một biến, một hằng. • Biểu thức logic chỉ cho ra kết quả là cỏc giỏ trị true hay false.

Khi sử dụng cõu lệnh gỏn kết quả của một biểu thức cho một biến, ta cần chỳ ý tới vấn đề đồng nhất kiểu dữ liệu giữa hai vế để trỏnh mất thụng tin. Vớ dụ:

Double delta = 0.0d; //khai bỏo một biến số thực cú tờn delta delta = 1/ 100; // Gỏn cho delta kết quả của phộp chia 1 cho 100.

Trong tỡnh huống này, ta khụng thu được delta = 0.01 như mong đợi mà là delta =0. Lý do là cỏc số 1 và 100 đều được hiểu là cỏc số nguyờn và kết quả của phộp chia được tự động làm trũn thành một giỏ trị nguyờn trước khi gỏn cho delta. Để khắc phục tỡnh trạng này, ta cần xỏc định rừ cỏc số 1 và 100 là cỏc số double.

delta = 1d/100d;

V. Cỏc lệnh điều khiển rẽ nhỏnh

V.1 Lệnh if

Lệnh if...{...}: là một phộp kiểm tra giỏ trị của một biểu thức boolean, nếu cho giỏ trị là true thỡ khối lệnh sẽ được thực hiện.

Cấu trỳc:

if <biểu thức boolean> {

<khối lệnh>; }

Nếu biểu thức boolean đỳng, khối lệnh sẽ được thực hiện, cũn nếu biểu thức đú sai thỡ khối lệnh sẽ bị bỏ qua.

Vớ dụ:

public class dkIfThen {

public static void main(String[] args) { int x=1;

int y=x+1; if (x<y) {

System.out.println("x>y"); } }} (adsbygoogle = window.adsbygoogle || []).push({});

Dạng 2 của cõu lệnh if:

if <biểu thức boolean> { <khối lệnh 1>; } else { <khối lệnh 2>; }

Nếu biểu thức boolean đỳng thỡ <khối lệnh 1> được thực hiện, cũn nếu biểu thức boolean sai thỡ <khối lệnh 2> được thực hiện.

Vớ dụ:

public class dkIfThen {

public static void main(String[] args) { int x=1; int y=x-1; if (x<y) { System.out.println("x>y"); } else { System.out.println("x<y"); }}} V.2. Lệnh switch …case

Lệnh switch ... case ...: Cho phộp chọn nhiều trường hợp xảy ra của giỏ trị so sỏnh. Cấu trỳc:

switch <biểu thức>{

case <giỏ trị 1>: <khối lệnh 1>; break; case <giỏ trị 2>: <khối lệnh 2>; break; ...

case <giỏ trị n>: <khối lệnh n>; break; default: <khối lệnh default>; break; }

Một số chỳ ý khi sử dụng lệnh switch-case:

Cỏc giỏ trị: <giỏ trị 1>, <giỏ trị 2>,…<giỏ trị n> phải là cỏc hằng số.

Nếu khụng sử dụng lệnh break mỗi khi kết thỳc cỏc khối lệnh thỡ sau khi thực hiện xong khối lệnh, cỏc lệnh tiếp theo sẽ được thực hiện.

VI. Cỏc lệnh lặp

VI.1. Vũng lặp for

Khi muốn một khối lệnh được thực hiện với một số lần biết trước, ta cú thể sử dụng một vũng lặp for.

Cấu trỳc lệnh:

for([<khởi tạo>]; [<biểu thức kiểm tra>]; [<bước nhảy>]) {

<Khối lệnh>; }

Bắt đầu với giỏ trị <khởi tạo> của biến đếm, <khối lệnh> được thực hiện. Sau mỗi lần thực hiện xong <khối lệnh>, biến đếm thay đổi giỏ trị một lượng bằng <bước nhảy> và <biểu thức kiểm tra> được tớnh lại. Nếu biểu thức kiểm tra là true thỡ lại thực hiện khối lệnh, cũn nếu là false, vũng lặp chấm dứt.

Lưu đồ hoạt động của vũng lặp for như sau:

37 Biểu thức kiểm tra Thực hiện khối lệnh Kết thỳc vũng for Biểu thức điều chỉnh

theo bước nhảy

Biểu thức biến điều khiển

false

Vớ dụ: tớnh tổng 1 dóy số thực public class vdFor {

public static void main(String[] args) { double accounts[]={1.2,1.4,1.6}; double sum=0;

for (int i=0;i<accounts.length;i++){ sum+=accounts[i];

}

System.out.println(sum); } (adsbygoogle = window.adsbygoogle || []).push({});

}//kết quả là: 4.2

Cỏc vũng for cú thể được đặt lồng nhau nếu cần Vớ dụ:

for(int i=0; i<10; i++) { [cỏc cõu lệnh; ] for(int j=0; j<5; j++) { [cỏc cõu lệnh; ] ... } [cỏc cõu lệnh; ] }

VI.2. Vũng lặp while

Khi một khối lệnh cần được thực hiện, thường là với một số lần khụng được biết trước, ta cú thể sử dụng vũng lặp while.

C u trỳc l nh:ấ ệ while <bt boolean> {

<Kh i l nh>;ố ệ }

Kh i l nh ố ệ đượ ực th c hi n khi <bt boolean> cũn cú giỏ tr true. ệ ị

Chỳ ý: trong khối lệnh phải cú cõu lệnh cú tỏc dụng ảnh hưởng tới kết quả <bt boolean> để vũng lặp cú thể dừng.

L u ư đồ ự th c hi n:ệ

VI.3. Vũng lặp do... while

Vũng lặp này cú ý nghĩa tương tự như vũng lặp while nhưng <khối lệnh> được thực hiện ngay ở vũng đầu tiờn mà chưa cần kiểm tra kết quả <biểu thức boolean>.

Cấu trỳc lệnh: do { 39 Bt boolean Cỏc cõu lệnh Cõu lệnh tiếp theo false true

<khối lệnh>;

} while <biểu thức boolean>;

Vũng lặp này cho thực hiện <khối lệnh> rồi mới kiểm tra <biểu thức boolean>. Nếu <biểu thức boolean> cú giỏ trị true thỡ tiếp tục thực hiện <khối lệnh>, nếu khụng sẽ dừng vũng lặp.

Vớ dụ tớnh tổng 10 số đầu tiờn: public class vdDoWhile {

public static void main(String[] args) { int x=1, sum=0; do{ sum+=x; x++; } while (x<11); System.out.println(sum); } } //kết quả là: 55 VI.4. Phộp nhảy

Trong một số trường hợp, việc thực hiện cỏc vũng lặp đụi khi khụng theo hết vũng mà cú thể dừng hoặc thoỏt khỏi vũng lặp.

Vớ dụ: Tỡm một giỏ trị nào đú trong một dóy 1000 phần tử. Khi thực hiện vũng lặp duyệt dóy, so sỏnh cỏc phần tử của dóy với giỏ trị cần tỡm từ phần tử đầu tiờn cho đến phần tử cuối cựng, nếu tỡm thấy phải thụi duyệt dóy ngay.

Việc nhảy ra khỏi vũng lặp được thực hiện với từ khoỏ break hoặc kết thỳc vũng hiện tại với lệnh continue.

Lệnh break

Lệnh này kết thỳc ngay vũng lặp trong cựng (nếu cú nhiều vũng lồng nhau) chứa nú. Vớ dụ: while <bt boolean 1>{ lệnh 1; lệnh 2; if <bt boolean 2> break; lệnh 3; } lệnh 4; Lệnh continue

Cho phộp chương trỡnh bỏ qua vũng hiện tại và nhảy đến vũng tiếp theo. Vớ dụ: while <bt boolean 1>{ lệnh 1; lệnh 2; if <bt boolean 2> { ……..

continue; }

lệnh 3; }

lệnh 4;

Khi <bt boolean 2> cú giỏ trị true, lệnh continue được thực hiện, chương trỡnh sẽ khụng thực hiện tiếp <lệnh 3> mà quay lại kiểm tra <bt boolean 1>.

VII. Vào d li u t bàn phớm và xu t d li u ra màn hỡnhữ ệ ữ ệ

VII.1. L y giỏ tr nh p vào t bàn phớmấ (adsbygoogle = window.adsbygoogle || []).push({});

Để lấy giỏ trị mà người sử dụng nhập từ bàn phớm, ta làm theo cỏc bước sau:

1. Khai bỏo biến thuộc lớp Scanner”. Lớp Scanner chỉ được hỗ trợ từ phiờn bản Java 1.5 và nằm trong gúi java.util.

// Khai bỏo một biến Scanner cú tờn là “nhap”.

Java.util.Scanner nhap = new java.util.Scanner(System.in); 2. Lấy giỏ trị nhập vào:

System.out.print("What is your name? "); // In ra màn hỡnh một cõu hỏi tờn /* Khai bỏo và gỏn giỏ trị nhập từ bàn phớm cho một biến kiểu String cú tờn name.*/ String name = nhap.nextLine();

Để đọc 1 từ trong chuỗi nhập vào: String firstName = nhap.next(); Nếu đọc vào một số nguyờn: int Tuoi = nhap.nextInt();

Tương tự cho cỏc kiểu dữ liệu khỏc. Vớ dụ:

import java.util.*; public class InputTest {

public static void main(String[] args) {

Scanner nhap = new Scanner(System.in); // Lay gia trị nhap ho ten

System.out.print("What is your name? "); String name = nhap.nextLine();

// Lay gia tri nhap tiep theo

System.out.print("How old are you? "); int age = nhap.nextInt();

// Hien thi ket qua nhap tren man hinh

System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1)); }

}

VII.2 K t xu t d li u ra màn hỡnhế ữ ệ

Trong cỏc chương trỡnh vớ dụ trờn, ta đó biết dựng hàm System.out.print để in dữ liệu ra màn hỡnh. Tuy nhiờn, trong một số trường hợp ta cần định dạng dữ liệu xuất ra chẳng hạn như hiển thị một số thực dạng thập phõn với độ chớnh xỏc nhất định.

System.out.printf(“%8.1f”, 10/3);

System.out.printf(“Hello, %s. You have %f VND ”, name,money); Sau đõy là bảng cỏc ký tự định dạng: Ký t ự định d ngạ Định dạng Vớ dụ D S nguyờn th p phõnố ậ 159 X S nguyờn h 16ố ệ 9f O S nguyờn h 8ố ệ 237 F S th c floatố ự 15.9

E S th c float theo ký phỏp c s eố ự ơ ố 1.59e+01 A S th c float d ng Hexaố ự ạ 0x1.fccdp3

S String Hello

C Ký tự H

B Boolean True

H Hash code 42628b2

tx Date and time

% Ký hi u ph n tr mệ ầ ă %

N Xu ng dũngố

Sau đõy là vớ dụ sử dụng cỏc ký tự định dạng khi xuất dữ liệu ra màn hỡnh. public class TestFormat

{ (adsbygoogle = window.adsbygoogle || []).push({});

public static void main(String[] argvs) {

double sothuc = 10.09898765;

/*In ra số thực chiếm 10 ký tự trờn màn hỡnh trong đú phần thập phõn chiếm 3 ký tự*/ System.out.printf("Ket qua 3 so sau dau phay la %10.3f \n",sothuc);

int songuyen =100; /*In ra số nguyờn ở hệ cơ số 16*/

System.out.printf("He 16 cua 100 duoc viet la: %x \n",songuyen); /*In ra số nguyờn ở hệ cơ số 8*/

System.out.printf("He 8 cua 100 duoc viet la: %o \n",songuyen); /*In ra ký tự đặc biệt “” */

System.out.print("\"Mot tram phan tram\" thi in ra the nao: 100%"); }}

Lưu ý rằng khi sử dụng cỏc ký tự định dạng ta cần dựng hàm System.out.printf() thay vỡ System.out.print() hay System.out.println() như thường lệ.

Bài tập

1. Viết chương trỡnh tớnh giỏ trị cỏc biểu thức (Giỏ trị n, k,…nhập từ bàn phớm): A = 1 + 1/2! + 1/3! + … + 1/n!

B = 1/1! – 1/2! + 1/3! - 1/4! + … + 1/(2k+1)! - ….

2. Viết chương trỡnh đếm số từ cú trong một chuỗi ký tự nhập vào. Cỏc từ cỏch nhau bởi dấu space,. và ;

3. Viết chương trỡnh đếm tần suất xuất hiện của cỏc từ trong một chuỗi nhập từ bàn phớm. 4. Nhập vào một chuỗi họ tờn của một người, hóy sửa lại cỏc ký tự đầu cỏc từ cho đỳng quy định viết hoa và khoảng cỏch giữa cỏc từ. Vớ dụ: nguyen van nam -> Nguyen Van Nam

5. Tỡm cỏc lỗi trong cỏc đoạn chương trỡnh sau: a)

For ( x = 100, x >= 1, x++ ) System.out.println( x );

b) Đoạn mó sau sẽ in ra cỏc giỏ trị chẵn hay lẻ: switch ( value % 2 ) {

case 0:

System.out.println( "Even integer" ); case 1:

System.out.println( "Odd integer" ); }

c) Đoạn mó sau sẽ in ra cỏc số nguyờn lẻ từ 19 đến 1 ?: for ( x = 19; x >= 1; x += 2 )

System.out.println( x );

d) Đoạn mó sau sẽ in ra cỏc số nguyờn chẵn từ 2 đến 100 ?: counter = 2;

do {

System.out.println( counter ); counter += 2;

} While ( counter < 100 );

6. Đoạn chương trỡnh sau làm gỡ? public class Printing {

public static void main( String args[] ) {

for ( int i = 1; i <= 10; i++ ) { for ( int j = 1; j <= 5; j++ ) System.out.print( '@' ); System.out.println(); } } } 43

7. Viết chương trỡnh tỡm số nhỏ nhất trong số cỏc số được nhập vào từ bàn phớm. Cho biết số nguyờn đầu tiờn nhập vào sẽ chớnh là số cỏc con số được nhập.

8. Viết chương trỡnh in ra màn hỡnh cỏc mẫu như sau: (adsbygoogle = window.adsbygoogle || []).push({});

9. Tớnh số PI theo cụng thức sau:

Đề tài 3. Lập trỡnh hướng đối tượng trong Java

I. Khỏi niệm lập trỡnh hướng đối tượng (Object-Oriented Programming - OOP)

I.1. Khỏi niệm OOP

Lập trỡnh hướng đối tượng là sự cài đặt một chương trỡnh theo hướng đối tượng bằng cỏc ngụn ngữ lập trỡnh, thường là ngụn ngữ OOP.

Như vậy, nếu dựng một ngụn ngữ OOP mà chương trỡnh khụng theo hướng đối tượng thỡ cũng khụng phải là lập trỡnh OOP. Trong khi nếu dựng một ngụn ngữ khụng hướng đối tượng để viết một chương trỡnh OOP (rất khú khăn) thỡ cũng cú thể gọi là lập trỡnh OOP. Thực tế thỡ ta khụng thể viết chương trỡnh hướng đối tượng bằng cỏc ngụn ngữ cấu trỳc (như Pascal chẳng hạn) vỡ cỏc ngụn ngữ này khụng hỗ trợ cỳ phỏp cài đặt và kỹ thuật biờn dịch cỏc đặc tớnh của hướng đối tượng.

Những ngụn ngữ OOP khụng chỉ bao gồm cỳ phỏp và một trỡnh biờn dịch (compiler) mà cũn cú một mụi trường phỏt triển toàn diện. Mụi trường này bao gồm một thư viện được thiết kế tốt, thuận lợi cho việc sử dụng kế thừa cỏc đối tượng – tớnh tỏi sử dụng. Đõy là một điểm mạnh của OOP và phương phỏp trước đõy khụng cú được.

Đối với một ngụn ngữ lập trỡnh hỗ trợ OOP thỡ việc triển khai kỹ thuật lập trỡnh hướng đối tượng sẽ dễ dàng hơn. Hơn nữa, cỏc dự ỏn phần mềm phõn tớch và thiết kế theo UML bắt buộc phải sử dụng kỹ thuật OOP để cài đặt thỡ mới phỏt huy hiệu quả.

I.2 Cơ sở lý luận của OOP

Chỳng ta thấy rằng thuật ngữ “hướng đối tượng” cú nghĩa là lấy đối tượng làm trung tõm và tất cả nằm trong đối tượng. Quan sỏt thế giới thực, ta thấy mọi vật đều cú vị trớ riờng của nú, chỳng sở hữu cỏc tớnh chất và thuộc tớnh riờng, cỏch thức vận động riờng. Chỳng ta gọi chỳng là những đối tượng. Theo cỏch hiểu như vậy thỡ mọi nghiệp vụ thực tế suy cho cựng chỉ là việc quản lý cỏc đối tượng, khai thỏc thụng tin cũng như cỏc mối quan hệ từ chỳng hoặc thay đổi trạng thỏi của chỳng.

OOP là phương thức tư duy mới để giải quyết vấn đề bằng mỏy tớnh. Để đạt kết quả, lập trỡnh viờn phải nắm được sự tương ứng giữa cỏc cỏc đối tượng thực tế, mối quan hệ giữa chỳng và sự hỗ trợ của ngụn ngữ để cài đặt chỳng vào mỏy tớnh. Ngụn ngữ OOP cung cấp đầy đủ phương tiện để thực hiện điều này. Chỳng ta sử dụng kỹ thuật hướng đối tượng để ỏnh xạ những thực thể chỳng ta gặp phải trong đời sống thực thành những thực thể tương tự trong mỏy tớnh. Do đú, phỏt triển phần mềm theo kỹ thuật lập trỡnh hướng đối tượng cú khả năng giảm thiểu sự lẫn lộn thường xảy ra giữa hệ thống và lĩnh vực ứng dụng.

Tuy nhiờn, từ nghiệp vụ thực tế chỳng ta khụng thể ngay lập tức đem vào cài đặt trong ngụn ngữ OOP mà phải qua một quy trỡnh phõn tớch và thiết kế theo hướng đối tượng như chỳng ta đó thấy qua việc nghiờn cứu ngụn ngữ mụ hỡnh húa UML – một ngụn ngữ giỳp chỳng ta trừu tượng húa thế giới thực.

I.3 Trừu tượng húa

Quản lý thụng tin, cỏc hành vi, cỏc mối quan hệ của cỏc đối tượng là nhiệm vụ mà lập trỡnh OOP phải làm. Thụng tin về đối tượng và mối quan hệ giữa chỳng thực tế là vụ cựng. Vậy làm thế nào để đưa chỳng vào mỏy tớnh? Cõu trả lời là chỳng ta cần một quỏ trỡnh trừu tượng húa.

Giả sử đối tượng quản lý là một sinh viờn. Một hệ thống quản lý sinh viờn cú thể chỉ cần quan tõm tới: Họ và tờn, ngày sinh, lớp học, địa chỉ nơi ở, điểm cỏc mụn học. Trong khi đú, cỏc thụng tin khỏc về sinh viờn – cũng là một con người – như chiều cao, cõn nặng, nhúm mỏu,… chỳng ta khụng cần quan tõm. Một quỏ trỡnh suy luận như vậy là một quỏ trỡnh trừu tượng húa dữ liệu. Ở đõy ta khụng quan tõm tới giỏ trị cụ thể của cỏc thuộc tớnh này.

Khi quan tõm tới giỏ trị của cỏc thuộc tớnh, chỳng ta cú một cõu hỏi: Cỏi gỡ làm cho dữ liệu này biến đối? Cõu trả lời là chớnh hành vi của đối tượng làm cho thuộc tớnh của chỳng bị thay đổi. Trong vớ dụ trờn, một anh sinh viờn bất kỳ cú thể cú hành vi “xin đổi lớp học” hoặc “đổi địa

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 34)