THINK JAVA: CÁCH SUY NGHĨ NHƯ NHÀ KHOA HỌC MÁY TÍNH - Trang 19

Number of minutes since midnight: 719

Fraction of the hour that has passed: 0

Dòng đ u tiên thì đúng nh mong đ i, nh ng dòng th hai th t kì qu c. Giá tr c a

ư

ư

ị ủ

minute

là 59, và 59

chia cho 60 b ng 0.98333, ch không ph i là 0.

V n

ấ đề ở đây là Java đã th c hi n phép

chia nguyên.

Khi c hai

toán h ng

đ u là s nguyên (toán h ng là nh ng đ i l ng mà toán t th c hi n tính toán),

ạ ượ

ử ự

thì k t qu cũng s là m t s nguyên, và

ế

ộ ố

theo quy đ nh chung, phép chia nguyên

làm tròn xu ng

, ngay

c trong tr

ng h p này khi giá tr sát v i s nguyên phía trên h n.

ườ

ớ ố

ơ

M t cách làm khác là đi tính ph n trăm thay vì m t phân s :

System.out.print(

"Percentage of the hour that has passed: "

);

System.out.println(minute*100/60);

K t qu là:

ế

Percentage of the hour that has passed: 98

M t l n n a k t qu l i đ

c làm tròn xu ng, nh ng l n này đáp s đã g n đúng h n. Đ đ

c k t qu

ộ ầ

ữ ế

ả ạ ượ

ư

ơ

ể ượ ế

chính xác h n, ta có th dùng m t ki u bi n khác, g i là d u ph y đ ng, đ l u tr nh ng giá tr có

ơ

ế

ể ư

ph n th p phân. Ta s ti p t c v n đ này trong ch

ng sau.

ẽ ế ụ ấ

ươ

2.7 Th t th c hi n

ứ ự ự

Khi trong bi u th c có nhi u h n m t toán t , th t đ nh l

ng s tuân theo

ơ

ứ ự ị

ượ

quy t c u tiên

ắ ư

. Gi i

thích đ y đ quy t c u tiên này có th ph c t p, nh ng đ b t đ u, b n ch c n nh :

ắ ư

ứ ạ

ư

ể ắ ầ

ỉ ầ

Các phép nhân và chia ph i đ

c th c hi n tr

c c ng và tr . Vì v y

ả ượ

ướ ộ

2*3-1

b ng 5 ch không ph i 4,

và 2/3-1 đ

c -1, ch không ph i 1 (hãy nh r ng phép chia nguyên

ượ

ớ ằ

2/3 b ng 0).

N u các toán t có cùng đ u tiên thì chúng đ

c đ nh l

ng t trái sang ph i. Vì v y, trong bi u

ế

ộ ư

ượ ị

ượ

th c

ứ minute*100/60, phép nhân đ c th c hi n tr c, cho ra

ượ

ướ

5900/60, và cu i cùng là

98. N u các

ế

phép toán ch y t ph i qua trái, k t qu đã thành

ạ ừ

ế

59*1 t c là

59, đi u này là sai.

B t c khi nào mu n v

t quy t c u tiên (hay khi b n không ch c quy t c này nh th nào), b n có th

ấ ứ

ượ

ắ ư

ư ế

dùng c p ngo c đ n. Bi u th c trong c p ngo c đ n đ

c th c hi n tr

c, b i v y

ặ ơ

ặ ơ

ượ

ướ

ở ậ 2 *(3-1) là 4. B n

cũng có th dùng c p ngo c đ n đ bi u th c tr nên d đ c, nh v i

ặ ơ

ể ể

ễ ọ

ư ớ

(minute * 100) / 60

, ngay c

khi không có nó thì k t qu cũng không đ i.

ế

2.8 Các thao tác v i chu i

Nói chung, b n không th th c hi n các phép toán đ i v i chu i, ngay c khi chu i trông gi ng nh

ể ự

ố ớ

ư

nh ng con s . Vì v y các bi u th c sau đây đ u không h p l :

ợ ệ

bob - 1 "Hello"/123 bob * "Hello"

Ti n th , qua nh ng bi u th c trên b n có phân bi t đ

c li u

ệ ượ ệ bob là s nguyên hay chu i không?

Không. Cách duy nh t đ bi t đ

c ki u c a bi n là nhìn vào n i nó đ

c khai báo.

ấ ể ế ượ

ể ủ

ơ

ượ

Đi u thú v là toán t

+

tác d ng v i chu i, nh ng có l không ho t đ ng theo cách b n mong đ i.

ư

ạ ộ

V i các

String, toán t

ử + có nhi m v

n i

, nghĩa là ghép n i ti p hai toán h ng v i nhau. B i v y

ố ế

ở ậ "Hello,

" + "world." s cho ra chu i

ỗ "Hello, world." còn bob + "ism" thì thêm đuôi ism vào b t kì ch gì

mà bob l u tr , cách đ t tên này này th t ti n trong tay nh ng ng

i quen tính bài bác.

ư

ậ ệ

ườ