2013-03-16 37 views
1

所以我有一個for循環,循環的次數是隨機數:隨機長度僅環產生低的數字

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

其作品,但似乎偏低有偏見。只是運行了幾次「民」似乎從來沒有給我們域任何回報遠高於20.更改到的Math.random()* 1000似乎並沒有回到40以上

這只是一點點東西太多這樣做並不需要任何實際的工作,只是對解釋感到好奇。

這裏有一個快速鏈接到工作代碼來測試自己:http://jsfiddle.net/Lv45r/1/

+0

這看起來像一個XY的問題...什麼是你想這樣做,甚至需要一個隨機長度的迭代? – 2013-03-16 20:30:20

回答

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/

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 
}