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

hoàn toàn. Còn các lo i trái cây là không có th t , vì v y mà ta không th so sánh táo v i cam đ

c.

ứ ự

ượ

Trong Java, ki u

ể boolean là không th t ; ta không th nói r ng

ứ ự

ằ true l n h n

ơ false.

T p h p các lá bài thì l i ph n nào đ

c x p th t , có nghĩa r ng đôi khi ta có th so sánh lá bài và đôi

ượ ế

ứ ự

khi không. Ch ng h n, tôi bi t r ng cây 3 Nhép thì cao h n 2 Nhép và 3 Rô thì cao h n 3 Nhép. Nh ng

ế ằ

ơ

ơ

ư

lá bài nào h n, 3 Nhép hay 2 Rô? M t lá thì có b c cao h n, nh ng lá kia thì có ch t cao h n.

ơ

ơ

ư

ơ

Đ làm cho các lá bài so sánh đ

c v i nhau, ta ph i quy t đ nh xem th nào quan tr ng h n, b c hay

ượ ớ

ế ị

ơ

ch t. Cách l a ch n là tùy ý, nh ng khi b n mua m t c bài m i, thì các qu n Nhép đ

c x p c nh

ư

ộ ỗ

ượ ế ạ

nhau, sau đó là các quân Rô, r i c nh v y. B i th ta hãy coi r ng ch t thì quan tr ng h n.

ồ ứ

ư ậ

ế

ơ

Khi đã quy t đ nh nh v y, ta có th vi t

ế ị

ư ậ

ể ế compareCard. Ph ng th c này nh n tham s là hai

ươ

Card r i

tr l i 1 n u lá bài th nh t h n, -1 n u lá bài th hai h n, và 0 n u chúng t

ng đ ng.

ả ạ

ế

ấ ơ

ế

ơ

ế

ươ

Tr

c tiên, ta so sánh ch t:

ướ

if

(c1.suit > c2.suit)

return

1;

if

(c1.suit < c2.suit)

return

-1;

N u hai câu l nh trên ch ng có câu l nh nào đúng, thì các ch t ph i b ng nhau, và ta ph i so sánh b c:

ế

ả ằ

if

(c1.rank > c2.rank)

return

1;

if

(c1.rank < c2.rank)

return

-1;

N u l i ch ng có câu nào đúng, thì hai b c ph i b ng nhau, và vì v y ta ph i tr l i

ế ạ

ả ằ

ả ả ạ 0.

13.6 M ng các lá bài

Đ n gi ta đã th y m t vài ví d v phép h p (kh năng k t h p nh ng đ c đi m c a ngôn ng l p trình

ế

ụ ề

ế ợ

ữ ậ

theo nhi u cách b trí khác nhau). M t trong nh ng ví d đ u tiên ta b t g p là vi c dùng phép kích

ụ ầ

ắ ặ

ho t ph

ng th c nh là m t ph n c a bi u th c. M t ví d khác là c u trúc l ng ghép g m các câu

ươ

ư

ầ ủ

l nh: b n có th đ t m t l nh

ể ặ

ộ ệ if bên trong m t vòng l p

ặ while, hay bên trong m t l nh

ộ ệ if khác, v.v.

Khi đã bi t đ

c d ng nh v y, và đã h c đ

c v m ng và đ i t

ng, thì có l b n ch ng ng c nhiên

ế ượ ạ

ư ậ

ọ ượ ề ả

ố ượ

ẽ ạ

khi đ

c bi t r ng ta có th t o nên m ng ch a nh ng đ i t

ng. Và b n có th đ nh nghĩa nh ng đ i

ượ

ế ằ

ể ạ

ố ượ

ể ị

t

ng có bi n th c th là các m ng; b n có th l p nên nh ng m ng ch a m ng khác; b n có th đ nh

ượ

ế

ể ậ

ể ị

nghĩa đ i t

ng ch a đ i t

ng khác, v.v. Trong hai ch

ng ti p theo, ta s th y nh ng ví d v cách

ố ượ

ố ượ

ươ

ế

ẽ ấ

ụ ề

k t h p nh v y trên c s các đ i t

ng

ế ợ

ư ậ

ơ ở

ố ượ Card.

Ví d này t o nên m t m ng g m 52 quân bài:

Card[] cards =

new

Card[52];

Sau đây là s đ tr ng thái cho đ i t

ng này:

ơ ồ ạ

ố ượ

M ng hi n t i có ch a các

ệ ạ

tham chi u

ế đ n đ i t ng; nó không ch a b n thân các đ i t ng

ế

ố ượ

ố ượ Card.

Nh ng ph n t này đ u đ

c kh i t o v

ầ ử

ượ

ở ạ ềnull. B n có th truy c p t ng ph n t trong m ng theo cách

ậ ừ

ầ ử