我使用以下代码在min和max之间生成一个随机数:
return min + (max - min) * Math.random();
它有效。但是,即使最大值为80,随机数通常也很少在“1或3”之间。
如何更好地在所有范围内分发随机数?
感谢
答案 0 :(得分:7)
我非常确定您发布的代码return min + (max - min) * Math.random();
应该在min(包含)和max(不包括)之间返回均匀分布的随机数。它没有理由在1到3之间返回。你是否尝试追踪最小值和最大值以确保它们是你认为的数字?
答案 1 :(得分:2)
Math.random()会在 0.0 和 1.0 之间返回一个随机数。要生成1到MAX之间的随机整数(我假设你想要),试试这个:
Math.ceil(Math.random()*MAX);
有关Math.Random()的更多信息,请参阅:
要生成MIN和MAX之间的随机整数,请尝试以下操作:
MIN + Math.round(Math.random()*(MAX-MIN));
要在MIN和MAX之间生成随机小数(浮点数),请尝试以下方法:
MIN + Math.random()*(MAX-MIN));
答案 2 :(得分:1)
试试这个:
package util
{
public class RandomNumberHelper
{
public static function randomIntRange(start:Number, end:Number):int
{
return int(randomNumberRange(start, end));
}
public static function randomNumberRange(start:Number, end:Number):Number
{
end++;
return Math.floor(start + (Math.random() * (end - start)));
}
}
}
...
protected function testRandomIntsInRange(start:int, end:int):void
{
var randomIntsAssigned:Object = {};
var randomInt:int = 0;
for (var i:int = 0; i < 10000; i++)
{
randomInt = RandomNumberHelper.randomIntRange(start, end);
if (!randomIntsAssigned.hasOwnProperty(randomInt))
randomIntsAssigned[randomInt] = 0;
randomIntsAssigned[randomInt]++;
}
trace(randomIntsAssigned);
}
我至少在0到9之间得到相当均匀的分布。
答案 3 :(得分:0)
number = (400 - (Math.floor(Math.random()*110)));
400 = max
110 = min
答案 4 :(得分:0)
试试这个。
function randomRange(minNum:Number, maxNum:Number):Number
{
return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
}