[問題] rand.nextInt 隨機問題
發揮耐心重複測試 APP,發現隨機的音效似乎不太隨機了..
狀況為:先判斷是否一定要播音效,若否,則 1/3 機率播音效,而音效 6 選 1 隨機
發現若進入 if ,音效都只會取 1, 2, 4, 5, 沒有進入 if 才有機會出現 3 跟 6
難道連續兩次接續呼叫 rand.nextInt 會導致數字有關聯嗎?懇請指教了~~ 感恩
public int randNumber(int from, int to) {
Random rand = new Random();
return rand.nextInt(to - from + 1) + from;
}
public boolean randPlaySound() {
if(!一定要播音效) {
if(randNumber(1, 3) != 2) // 取 1/3 機率播放
return false;
}
// 也就是 randNumber(1, 3) 取 2 立即再取 randNumber(1, 6)
switch(randNumber(1, 6)) {
case 1:
mp_scare_bye.start(); // 偶而出現 (算是正常機率)
break;
case 2:
mp_scare_holy.start(); // 非常頻繁出現
break;
case 3:
mp_scare_homerun.start(); // 從未出現 (除非沒進 if 才有機會出現)
break;
case 4:
mp_scare_ohoh.start(); // 偶而出現 (算是正常機率)
break;
case 5:
mp_scare_scream.start(); // 非常頻繁出現
break;
case 6:
mp_scare_sheep.start(); // 從未出現 (除非沒進 if 才有機會出現)
break;
}
return true;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.248.182
→
07/28 14:39, , 1F
07/28 14:39, 1F
→
07/28 14:46, , 2F
07/28 14:46, 2F
您的意思是 class 中宣告 rand1to3 以及 rand1to6
取 1 ~ 3 數字時用 rand1to3.nextInt(3) + 1;
取 1 ~ 6 數字時用 rand1to6.nextInt(6) + 1;
這樣嗎?
不過後來我用比較土法煉鋼的解法,原文程式裡的 randNumber(1, 3)
改用另一種隨機數字取法 Math.random() * 3,目的只是為了不連續用同一種亂數取法
這樣跑起來是正常多了 @@
※ 編輯: shawnba 來自: 220.135.248.182 (07/28 15:51)
推
07/28 15:59, , 3F
07/28 15:59, 3F