đ 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];