1

所以我有一个循环随机次数的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/

4

2 回答 2

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
}
于 2013-03-16T20:28:01.873 回答
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/

于 2013-03-16T20:28:51.393 回答