我正在使用 JavaScript 制作康威生命游戏的复制品,并发现函数 Math.random() 总是返回某种模式。这是一个在 100x100 网格中随机生成结果的示例:
有人知道如何获得更好的随机数吗?
ApplyRandom: function() {
var $this = Evolution;
var total = $this.Settings.grid_x * $this.Settings.grid_y;
var range = parseInt(total * ($this.Settings.randomPercentage / 100));
for(var i = 0; i < total; i++) {
$this.Infos.grid[i] = false;
}
for(var i = 0; i < range; i++) {
var random = Math.floor((Math.random() * total) + 1);
$this.Infos.grid[random] = true;
}
$this.PrintGrid();
},
[更新]
我在这里创建了一个jsFiddle:http://jsfiddle.net/5Xrs7/1/
[更新]
看来 Math.random() 最终还是没问题的(感谢 raina77ow)。对不起,大家! :(. 如果您对结果感兴趣,这里是游戏的更新版本:http://jsfiddle.net/sAKFQ/
(但我认为还有一些 bug...)
{1,2}
中进行选择的概率。您得到 2 的频率与获得 1 或 4 的组合结果的频率一样多。 - JayCMath.Random()
并不是问题所在,但为了让其他有类似问题的人受益,值得重申一下这句箴言:每当你认为在使用的库中发现了一个错误时,很有可能实际上是你自己代码中的错误,而不是核心库中的错误。Jeff Atwood 的表述更好,我只需在此链接他的博客:编程的第一原则:任何问题都是你的问题。 - Spudley