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

Quá trình này—vi t gi mã tr

c r i m i vi t ph

ng th c th c hi n sau—đ

c g i là

ế

ướ ồ

ế

ươ

ượ ọ

phát tri n t

trên xu ng

(xem http://en.wikipedia.org/wiki/Top-down_and_bottom-up_design).

14.3 S p x p

ế

Bây gi khi đã làm c bài l n lung tung lên, ta c n m t cách khi n nó tr l i tr t t . Có m t thu t toán

ế

ở ạ ậ ự

s p x p gi ng v i thu t toán tr n đ n không ng . Nó đ

c g i là

ế

ế

ượ ọ

s p x p ch n

ế

b i nó ho t đ ng d a

ạ ộ

trên vi c duy t m ng l p đi l p l i và m i l n duy t thì ch n l y lá bài th p nh t còn l i.

ặ ạ

ỗ ầ

ọ ấ

Trong l n l p th nh t, ta tìm l y lá bài th p nh t r i đ i ch cho lá bài v trí th 0. Trong l n l p

ầ ặ

ấ ồ ổ

ở ị

ầ ặ

th

ứ i, ta tìm l y lá bài th p nh t bên ph i v trí

ả ị i r i đ i ch nó cho lá bài th

ồ ổ

ứ i.

Sau đây là gi mã cho cách s p x p ch n:

ế

for

(

int

i = 0; i < deck.cards.length; i++) {

// tìm lấy lá bài thấp nhất tại vị trí i, hoặc bên phải chỗ đó

// đổi chỗ lá bài thứ i với lá bài thấp nhất tìm được

}

M t l n n a, gi mã giúp cho vi c thi t k các

ộ ầ

ế ế

ph

ng th c tr giúp

ươ

. Trong tr

ng h p này, ta có th

ườ

dùng l i

ạ swapCards, b i v y ta ch c n có m t ph ng th c m i, có tên

ở ậ

ỉ ầ

ươ

indexLowestCard, đ nh n m t

m ng nh ng lá bài và m t ch s n i c n b t đ u tìm ki m.

ỉ ố ơ ầ

ắ ầ

ế

14.4 C bài con

V y ta nên bi u di n m t ph n bài hay m t d ng t p con c a c bài đ nh th nào? M t kh năng là

ộ ạ

ủ ỗ

ư ế

t o nên m t l p m i có tên

ộ ớ

Hand, và nó có th m r ng

ể ở ộ Deck. M t kh năng khác, nh tôi trình bày

ư

đây, là bi u di n m t ph n bài b ng đ i t

ng

ố ượ Deck nh ng có ít h n 52 lá bài.

ư

ơ

Ta có th mu n m t ph

ng th c,

ươ

ứ subdeck, đ nh n m t c bài và m t kho ng ch s , r i tr l i m t c

ộ ỗ

ỉ ố ồ ả ạ

ộ ỗ

bài m i ch a t p con nh ng lá bài đã ch đ nh:

ứ ậ

ỉ ị

public static

Deck subdeck(Deck deck,

int

low,

int

high) {

Deck sub =

new

Deck(high-low+1);

for

(

int

i = 0; i<sub.cards.length; i++) {

sub.cards[i] = deck.cards[low+i];

}

return

sub;

}

Chi u dài c a c bài con là

ủ ỗ

high-low+1 b i c lá bài th p (low) l n cao (high) đ u đ

c tính vào. Cách

ở ả

ượ

tính có th gây nh m l n, và d n đ n l i “l ch m t”. Cách tránh l i này t t nh t th

ng là v hình minh

ế ỗ ệ

ườ

h a.

Vì ta đã cung c p

ấ new vào m t đ i s , nên contructor đ c kích ho t s là cái đ u tiên, v n ch huy đ ng

ộ ố ố

ượ

ạ ẽ

m ng mà không huy đ ng b t kì lá bài nào. Bên trong vòng l p

ặ for, c bài con đ c đi n đ y nh ng b n

ượ

sao tham chi u t c bài l n.

ế ừ ỗ

D

i đây là s đ tr ng thái c a c bài con đ

c t o nên b ng nh ng tham s

ướ

ơ ồ ạ

ủ ỗ

ượ ạ

ố low=3 và high=7. K t qu

ế

là m t ph n bài g m 5 lá đ

c chung v i c bài ban đ u; nghĩa là theo cách đ t bí danh (alias).

ượ

ớ ỗ