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

ph

ng th c đ i t

ng. Tôi v n đ nguyên

ươ

ứ ố ượ

merge mà không thay đ i vì tôi nghĩ nó là ph

ng th c l p

ươ

ứ ớ

thì s d đ c h n. Hãy chuy n

ẽ ễ ọ ơ

ể merge thành m t ph ng th c đ i t ng, và chuy n

ươ

ứ ố ượ

ể mergeSort m t

cách t

ng ng. B n thích phiên b n

ươ

ả merge nào h n?

ơ

Bài t p 2

Hãy chuy n ph

ng th c l p sau đây thành ph

ng th c đ i t

ng.

ươ

ứ ớ

ươ

ứ ố ượ

public static double

abs(Complex c) {

return

Math.sqrt(c.real * c.real + c.imag * c.imag);

}

Bài t p 3

Hãy chuy n ph

ng th c l p sau đây thành ph

ng th c đ i l p

ươ

ứ ớ

ươ

ứ ố ớ .

public boolean

equals(Complex b) {

return

(real == b.real && imag == b.imag);

}

Bài t p 4

Bài t p này là s ti p n i theo Bài t p

ự ế

ậ 3 c a Ch ng 11. M c đích là nh m th c hành cú pháp

ươ

c a nh ng ph

ng th c đ i t

ng và làm quen v i nh ng thông báo l i có liên quan.

ươ

ứ ố ượ

1.

Hãy chuy n các ph

ng th c trong l p

ươ

ớ Rational t ph ng th c l p sang ph ng th c đ i t ng, đ ng

ươ

ứ ớ

ươ

ứ ố ượ

th i th c hi n nh ng chuy n đ i c n thi t trong

ổ ầ

ế

main.

2. C ý m c m t s l i. Th kích ho t các ph

ng th c l p nh th chúng là ph

ng th c đ i t

ng, và

ộ ố ỗ

ươ

ứ ớ

ư ể

ươ

ứ ố ượ

ng

c l i. Hãy th tìm hi u xem th nào là h p l và th nào không, và hi u thông báo l i b n nh n

ượ ạ

ế

ợ ệ

ế

ỗ ạ

đ

c khi m i vi c r i lên.

ượ

ệ ố

3. Hãy nghĩ v u và nh

c đi m c a các ph

ng th c l p và ph

ng th c đ i t

ng? Cách nào (th

ng)

ề ư

ượ

ươ

ứ ớ

ươ

ứ ố ượ

ườ

vi t g n h n? Cách nào di n đ t tính toán m t cách t nhiên h n (ho c xét công b ng, nh ng ki u phép

ế ọ

ơ

ơ

tính nào có th đ

c di n đ t m t cách t nhiên nh t theo m i phong cách)?

ể ượ

Bài t p 5

M c đích c a bài t p này là vi t m t ch

ng trình đ phát sinh ra nh ng ph n bài poker

ế

ươ

ng u nhiên r i phân lo i chúng, đ ta

c tính đ

c xác su t c a các d ng ph n bài khác nhau. N u b n

ướ

ượ

ấ ủ

ế

không ch i poker, b n có th đ c v nó đây

ơ

ể ọ ề

http://en.wikipedia.org/wiki/List_of_poker_hands.

1.

B t đ u b ng

ắ ầ

http://thinkapjava.com/code/CardSoln3.java r i đ m b o ch c r ng b n biên d ch và

ồ ả

ắ ằ

ch y đ

c ch

ng trình.

ượ

ươ

2.

Hãy vi t l i đ nh nghĩa cho m t l p có tên

ế ờ ị

ộ ớ

PokerHand (ph n bài), m r ng t

ở ộ

ừ Deck.

3.

Vi t m t ph

ng th c trong

ế

ươ

Deck có tên deal đ t o ra m t PokerHand, chuy n các lá bài t c bài vào

ể ạ

ừ ỗ

ph n bài, r i tr l i ph n bài này.

ồ ả ạ

4.

Trong main, hãy dùng shuffle và deal đ phát sinh và in ra b n

ố PokerHand, m i ph n bài g m 5 lá. B n

có thu đ

c k t qu t t không?

ượ ế

ả ố

5.

Vi t m t ph

ng th c

ế

ươ

ứ PokerHand có tên hasFlush đ tr l i m t giá tr boolean đ ch đ nh xem li u

ể ả ạ

ể ỉ ị

ph n bài này có m t flush (5 lá đ ng ch t) hay không.

6.

Vi t m t ph

ng th c có tên

ế

ươ

hasThreeKind đ ch đ nh xem li u ph n bài có b ba hay không.

ể ỉ ị

7.

Vi t m t vòng l p đ phát sinh ra vài nghìn ph n bài r i ki m tra xem chúng có ch a 5 lá đ ng ch t, hay

ế

b ba không.

c tính xác su t đ nh n đ

c m t trong hai d ng ph n bài k trên. Hãy so sánh k t qu

Ướ

ấ ể

ượ

ế

thu đ

c v i các xác su t

ượ ớ

ấ ở http://en.wikipedia.org/wiki/List_of_poker_hands.

8. Vi t các ph

ng th c đ ki m tra cho nh ng d ng ph n bài khác. Có d ng d , có d ng khó. Đôi khi b n

ế

ươ

ứ ể ể

s th y c n vi t m t vài ph

ng th c tr giúp ph c v cho nhi u phép ki m tra khác nhau.

ẽ ấ ầ

ế

ươ

ụ ụ

9. Có nh ng trò ch i poker mà ng

i ch i l y 7 lá bài, r i ch n ra 5 lá bài đ p nh t. Hãy s a l i ch

ng

ơ

ườ

ơ ấ

ử ạ

ươ

trình c a b n đ phát sinh ra các ph n bài 7 lá r i tính l i nh ng xác su t nêu trên.