|
作者山賊
num = 39
For i = 0 To 5
b1 = Int(Rnd() * num) + 1 '亂數選號, 範圍為 整數[(0~1)*num]+1, 此時所計算出的亂數整數為數列的座標
Text1(i).Text = ball(b1) '選中的號碼,放入Text1文字方塊中
ball(b1) = ball(num) '拿最末尾的數取代已選出的號碼
num = num - 1 '選擇範圍減 1
Next i '因為已選過的號碼已被最末尾數取代, 故不會再出現, 又因為範圍減一, 所以最末尾數不會重複
====================================
整個運作邏輯乍看之下大致似乎沒問題, 但是 Rnd() 所得到的數必須小於 (38.5/39), 否則乘上 num 再加 1, 會超過數列末尾, 譬如:
1. 若第一次 rnd() 即得 0.9872 以上的數, 則 b1 = 0.9872*39 + 1=40
2. 若是第一次選到 39, 而第二次 rnd() 得 0.9872 以上的數, 得出 b1=39, 也就是重複選號.
3. 同理, 其它任一次只要 rnd() 得 0.9872 以上的數, 都會導致末尾數代替被...
|