如果我得到一个随机数字,我如何增加使该随机数为偶数的机会。我不想每次都做到这一点。我只是想生成一个随机数,比如...%70的时间或%90%的时间。
private function randNum (high, low) {
return Math.floor(Math.random() * (1+high-low)) + low;
}
我会向这个函数传递更大范围的数字吗?或者我是否必须完全取消此功能?
谢谢
答案 0 :(得分:4)
private function randNum (high : Number, low : Number) : int
{
var even : Boolean = Math.random() < 0.7; //set probability of even number here
var rand : int = Math.floor(Math.random() * (1+high-low)) + low;
if (even)
while (rand % 2 != 0)
rand = Math.floor(Math.random() * (1+high-low)) + low;
else
while (rand % 2 != 1)
rand = Math.floor(Math.random() * (1+high-low)) + low;
return rand;
}
测试:
var even : int = 0;
var odd : int = 0;
for (var i : int = 0; i < 100000; i++)
{
var a : int = randNum(1, 20);
if (a % 2 == 0)
even++;
else
odd++;
}
trace(even, odd);
输出:
[trace] 69869 30131
答案 1 :(得分:2)
有点太晚了;)但是另一个没有循环并使用位屏蔽操作:
ret & -2
会使您的号码均匀,然后根据(Math.random() >= evenProbability)
的结果,您将低位设置为1以给出奇数
function randomRange(low:int, high:int, evenProbability:Number = 0.5):int{
var ret:int = int( Math.random() * ( 1 + high - low ) ) + low
return ( ret & -2 ) | int( Math.random() >= evenProbability )
}
这是一个使用wonderfl的实时测试:http://wonderfl.net/c/9IHx