-2

私は非常に奇妙な問題に遭遇しました。私はその解決策を見つけようとしましたが、無駄でした。私の問題は、1 から 45 までの乱数を作成したいのですが、その数を繰り返したくないということです。

4

4 に答える 4

4

定義上、ランダム選択はランダムに繰り返されます。

ただし、各数値を含む配列を作成し、その配列をシャッフルして、繰り返しのないランダムな順序の数値を生成することができます。

var nums = [], i;
for( i=1; i<=45; i++) nums.push(i);
nums.sort(function(a,b) {return Math.random()-0.5;});
alert(nums.join(","));
于 2013-02-15T06:30:42.000 に答える
0

これは作業コードです。

Random rd =new Random();    
int n = rd.Next(1,45);
于 2013-02-15T06:37:16.807 に答える
0

本当に必要なのは、特定の範囲で一連の数値を作成し、そのセットが空になるまで数値の 1 つをランダムに削除することです。

以下は、まさにそれを行う別の関数を生成する関数です。

function generateRandomRangeSet(beg, end) {
  var numbers = []; // Create an array in range [beg, end].
  for (var i=beg; i<=end; i++) { numbers.push(i); }
  return function() {
    if (numbers.length < 1) { throw new Error('no more numbers'); }
    var i=Math.floor(Math.random()*numbers.length), number=numbers[i];
    numbers.splice(i, 1); // Return and remove a random element of the array.
    return number;
  }
}

var r = generateRandomRangeSet(1, 45);
r(); // => 9
r(); // => 24
r(); // => 7 ... for each number [1, 45] then ...
r(); // Error: no more numbers
于 2013-02-15T06:39:37.483 に答える