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

đ thay đ i các vòng l p; ch

ng trình s ch y đ

c đúng v i m i kích c m ng khác nhau.

ươ

ẽ ạ

ượ

ỡ ả

for

(

int

i = 0; i < a.length; i++) {

b[i] = a[i];

}

L n cu i cùng mà ph n thân c a vòng l p đ

c th c thi,

ượ

i s là

ẽ a.length - 1, ch s c a ph n t cu i.

ỉ ố ủ

ầ ử ố

Khi i b ng v i

ớ a.length, đi u ki n s không th a mãn và ph n th n s không đ c th c thi. Đây là đi u

ệ ẽ

ầ ẽ

ượ

t t, vì s có bi t l đ

c phát ra. Đo n mã này gi thi t r ng m ng

ệ ệ ượ

ế ằ

ả b ph i có b ng s ph n t , ho c

ầ ử

nhi u h n so v i

ơ

ớ a.

12.6 S ng u nhiên

Đa s các ch

ng trình máy tính đ u làm cùng m t công vi c m i khi nó đ

c th c thi; ch

ng trình

ươ

ượ

ươ

nh v y đ

c g i là có tính

ư ậ

ượ ọ

t t đ nh

. Thông th

ng, t t đ nh là tính ch t t t, vì ta luôn trông đ i cùng

ườ

ấ ị

ấ ố

m t phép tính s ch cho m t k t qu . Song có nh ng ch

ng trình ng d ng mà ta mu n k t qu ph i

ẽ ỉ

ộ ế

ươ

ế

không đoán tr

c đ

c. M t ví d hi n nhiên là các trò ch i đi n t , song cũng có nh ng ng d ng khác

ướ ượ

ụ ể

ơ

ệ ử

n a.

Đ m t ch

ng trình th c s

ể ộ

ươ

ự ự phi t t đ nh

hóa ra l i không d chút nào, song ít nh t v n có nh ng cách

ấ ẫ

làm ch

ng trình có v nh phi t t đ nh. M t cách làm trong s đó là vi c phát sinh nh ng s ng u

ươ

ư

ấ ị

nhiên và dùng nó đ quy đ nh k t qu c a ch

ng trình. Java có m t ph

ng th c đ phát sinh ra các

ế

ả ủ

ươ

ươ

ứ ể

s

gi ng u nhiên

, v n không th c s ng u nhiên, nh ng s dùng đ

c cho m c đích ta c n.

ự ự

ư

ượ

Hãy đ c tài li u v ph

ng th c

ươ

ứ random trong l p

ớ Math. Giá tr tr l i là m t

ị ả ạ

ộ doublen m gi a 0.0 và

1.0. Chính xác là, nó l n h n ho c b ng 0.0 và nh h n 1.0. M i l n kích ho t

ơ

ặ ằ

ỏ ơ

ỗ ầ

ạ random b n s nh n

ạ ẽ

đ

c con s ti p theo trong dãy s gi ng u nhiên. Đ th y đ

c m t m u c a dãy ng u nhiên, hãy ch y

ượ

ố ế

ố ả

ể ấ

ượ

ẫ ủ

vòng l p sau:

for

(

int

i = 0; i < 10; i++) {

double

x = Math.random();

System.out.println(x);

}

Đ phát sinh m t s

ộ ố double gi a 0.0 và m t gi i h n trên nh

ớ ạ

ư high, b n có th nhân

x v i

ớ high.

12.7 M ng các s ng u nhiên

B ng cách nào đ phát sinh m t s nguyên ng u nhiên gi a

ộ ố

ữ low và high? N u ph ng

ế

ươ

th c

ứ randomInt b n vi t đã chính xác, thì m i giá tr trong kho ng t

ế

ừ low lên đ n

ế high-1 ph i có cùng

xác su t xu t hi n. N u b n phát sinh m t dãy s r t dài, thì m i giá tr ph i xu t hi n ít nh t là có s

ế

ố ấ

l n x p x nhau.

M t cách ki m tra ph

ng th c v a vi t là phát inh r t nhi u s ng u nhiên, l u tr chúng vào m t

ươ

ứ ừ

ế

ề ố

ư

m ng, r i đ m s l n t ng giá tr xu t hi n.

ồ ế

ố ầ ừ

Ph

ng th c sau nh n m t đ i s duy nh t là kích th

c c a m ng. Ph

ng th c có nhi m v huy đ ng

ươ

ộ ố ố

ướ ủ

ươ

m t m ng s nguyên m i, đi n vào nh ng giá tr ng u nhiên, r i tr l i tham chi u đ n m ng m i đi n.

ồ ả ạ

ế

ế

public static int

[] randomArray(

int

n) {

int

[] a =

new int

[n];