作者shawnba (冰秘熊巴)
看板AndroidDev
标题[问题] rand.nextInt 随机问题
时间Sun Jul 28 10:47:11 2013
发挥耐心重复测试 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
1F:→ Griffith:请将这一段 Random rand = new Random();移到class scope 07/28 14:39
2F:→ Griffith:并将不同范围的random,分别成不同的变数~ ((小弟的拙见 07/28 14:46
您的意思是 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)
3F:推 Griffith:嗯嗯XDDDDD" 07/28 15:59