随机长度仅用于循环生成低数字

时间:2013-03-16 20:26:08

标签: javascript loops random for-loop

所以我有一个for循环,循环随机次数:

for(var i = 0; i<Math.floor(Math.random()*100); i++){
  var num = i
}

有效,但似乎偏向偏低。只运行几次'num'似乎永远不会返回20以上的任何东西。将我们的域名更改为Math.random()* 1000似乎没有返回任何高于40的值。

这只是有点乱,所以不需要任何实际工作,只是对解释感到好奇。

以下是工作代码的快速链接,可以自行测试:http://jsfiddle.net/Lv45r/1/

2 个答案:

答案 0 :(得分:4)

在每个循环的版本中,都会生成一个新的随机数。这导致了对较低数字的偏见。要解决这个问题,首先要创建你的号码,然后循环:

for(var i = 0, max=Math.floor(Math.random()*100); i<max; i++){
  var num = i
}

var max = Math.floor(Math.random()*100);
for(var i = 0; i<max; i++){
  var num = i
}

答案 1 :(得分:2)

问题是,确定循环次数的随机数正在每次次迭代中进行评估。将代码更改为以下内容:

$(document).ready(function(){
    $('button').click(function(){
        var loops = Math.floor(Math.random()*100);
        for(var i=0; i<loops; i++){
            var num = i
        }
        alert(num);
    })
})

更新了小提琴:http://jsfiddle.net/Lv45r/3/