配列に 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。
配列に 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。
すべての変数が宣言されていることを確認してください。
var x = [], k, l, fail;
内側のループの前に「失敗」をリセットしてください。
fail = false;
for (l = 0; l < k; l++)
// ...
そうは言っても、配列に10個の数字が必要で、配列の長さが10個の場合は、配列に1から10(または0から9など)の数字を入力してから、配列をシャッフルする方がよいでしょう。自分のやり方で物事を行うと、プロセスのパフォーマンスは予測できなくなります。最後の 2 つの要素にたどり着くまでに、2 ~ 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);
現在の方法は非常に遅いため、
もっと簡単かもしれません-
var nums= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].sort(
function(){return Math.random()-.5});
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);