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

Deck deck =

new

Deck();

Bây gi vi c đ t các ph

ng th c thu c v các đ i t

ng

ờ ệ ặ

ươ

ộ ề

ố ượ Deck vào trong l i đ nh nghĩa l p

ờ ị

ớ Deck là h p

lý. Khi xem xét nh ng ph

ng th c mà ta đã vi t cho đ n gi , d th y m t ng c viên đó

ươ

ế

ế

ờ ễ ấ

ộ ứ

là printDeck (M c

ụ 13.7). Sau đây là dáng v c a nó, đ c vi t l i đ ho t đ ng v i

ẻ ủ

ượ

ế ạ ể

ạ ộ

ớ Deck:

public static void

printDeck(Deck deck) {

for

(

int

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

Card.printCard(deck.cards[i]);

}

}

M t s thay đ i là ki u c a tham s , t

ộ ự

ể ủ

ố ừ Card[] sang Deck.

Thay đ i th hai là ta không còn dùng đ

c

ượ deck.length đ l y chi u dài c a m ng, b i gi đây

ể ấ

deck đã

là m t đ i t

ng

ộ ố ượ Deck, ch không ph i m t m ng. Nó ch a m t m ng, nh ng nó không ph i là m ng.

ư

B i v y ta ph i vi t

ở ậ

ế deck.cards.length đ k t xu t đ c m ng t đ i t ng

ể ế

ấ ượ

ừ ố ượ Deck r i l y chi u dài c a

ồ ấ

m ng này.

V i lý do t

ng t , ta ph i dùng

ươ

deck.cards[i] đ truy c p m t ph n t c a m ng, thay vì ch vi t

ầ ử ủ

ỉ ế deck[i].

S thay đ i cu i cùng là vi c kích ho t

ạ printCard ph i nói rõ r ng

ằ printCard đ c đ nh nghĩa trong

ượ ị

l p

ớ Card.

14.2 Tráo bài

Trong ph n l n các trò ch i bài tây, b n c n ph i tráo c bài; nghĩa là x p bài theo m t tr t t ng u

ầ ớ

ơ

ạ ầ

ế

ậ ự

nhiên. M c 12.6

Ở ụ

ta đã th y cách phát sinh s ng u nhiên, song th t không d th y cách áp d ng đ

ễ ấ

tráo c bài.

M t kh năng là mô ph ng cách con ng

i tráo bài, th

ng là chia c bài làm đôi r i ch n bài đan xen

ườ

ườ

t t ng ph n. B i ng

i th

ng không th tráo chính xác theo cách này đ

c, nên sau ch ng 7 l n l p

ừ ừ

ườ

ườ

ượ

ầ ặ

l i thao tác thì c bài d

ng nh đã hoàn toàn ng u nhiên. Song m t ch

ng trình máy tính thì l i có

ườ

ư

ươ

đ c đi m luôn tr n bài th t hoàn h o nên k t qu s không th t ng u nhiên. Th c t là, sau 8 l n tr n,

ế

ả ẽ

ự ế

máy s làm cho c bài v nguyên tr ng. B n có th xem thông tin thêm

http://en.wikipedia.org/wiki/Faro_shuffle.
M t thu t toán tr n bài h p lý h n là trong m i l n duy t ch l t m t lá bài, và m i l n l p thì ch n l y

ơ

ỗ ầ

ỉ ậ

ỗ ầ ặ

ọ ấ

hai lá bài r i đ i ch chúng.

ồ ổ

Sau đây là phác th o cách ho t đ ng c a thu t toán này. Đ phác h a ch

ng trình, tôi k t h p câu l nh

ạ ộ

ươ

ế ợ

Java v i ngôn ng nói, mà đôi khi đ

c g i là

ượ ọ

gi mã

:

for

(

int

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

// chọn một số nằm giữa 1 và deck.cards.length-1

// đổi chỗ lá bài thứ i và lá bài ngẫu nhiên được chọn

}

Đi u hay gi mã là nó th

ng làm rõ nh ng ph

ng th c nào mà b n s p c n có. Trong tr

ng h p

ở ả

ườ

ươ

ạ ắ ầ

ườ

này, ta c n m t th nh

ư randomInt, đ ch n m t s nguyên ng u nhiên gi a

ể ọ

ộ ố

ữ low và high,

và swapCards đ nh n vào hai ch s r i đ i ch hai lá bài v trí các ch s đó.

ỉ ố ồ ổ

ở ị

ỉ ố

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.