-1

配列に 10 個の異なる乱数が必要です。

私は次の機能を使用しています:

    for (k=0;k<10;k++) {
      x[k] = Math.floor((Math.random()*10));
      for (l=0;l<k;l++){
        if (x[l]==x[k]){fail=true;}
      }
      if (fail){k=k-1;}
    }

答えはTHX。

4

4 に答える 4

3

すべての変数が宣言されていることを確認してください。

var x = [], k, l, fail;

内側のループの前に「失敗」をリセットしてください。

  fail = false;
  for (l = 0; l < k; l++)
    // ...

そうは言っても、配列に10個の数字が必要で、配列の長さが10個の場合は、配列に1から10(または0から9など)の数字を入力してから、配列をシャッフルする方がよいでしょう。自分のやり方で物事を行うと、プロセスのパフォーマンスは予測できなくなります。最後の 2 つの要素にたどり着くまでに、2 ~ 3 回の試行が必要な場合もあれば、数百回の試行が必要な場合もあります。乱数列が何をするかはわかりません。

于 2013-06-01T13:14:58.300 に答える
3

次のように、配列に 1 から 10 までの数字を入力してシャッフルする方がよいでしょう。

var myArray = [1,2,3,4,5,6,7,8,9,10];

//shuffle array
//code from http://stackoverflow.com/a/2450976/1223693
var i = myArray.length, j, temp;
if ( i === 0 ) return false;
while ( --i ) {
   j = Math.floor( Math.random() * ( i + 1 ) );
   temp = myArray[i];
   myArray[i] = myArray[j]; 
   myArray[j] = temp;
}

//done
alert(myArray);

現在の方法は非常に遅いため、

  • 内側のループがあります
  • 正しい数値を生成する前に、何度も間違った数値を生成する可能性があります
于 2013-06-01T13:16:06.763 に答える
1

もっと簡単かもしれません-

var nums= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].sort(
function(){return Math.random()-.5});
于 2013-06-01T13:41:43.047 に答える
1

0 から 9 までの乱数を持つ 10 個の要素を持つ配列が本当に必要なのですが、どれも同じであってはなりませんか? では、10 要素の 0 ~ 9 の数字をシャッフルしたいですか?

次に、それらを初期化してシャッフルします。

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/array/shuffle [v1.0]
function shuffle(o){ //v1.0
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};


// init the array:
var a = new Array();
for (var i=0;i<10;i++){
  a.push(i);
} 
// shuffle it.
a = shuffle(a);
于 2013-06-01T13:19:05.077 に答える