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 に答える