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).
ộ
ầ
ồ
ượ
ớ ỗ
ầ
ặ