毎回異なる2〜5の乱数を生成する必要があります。たとえば、2つの3を連続して、2つを5つ続けてはいけません。これを次のようにfor()ループに入力する必要があります。毎回異なる乱数を生成する
for(var i = 0; i < noBoxes.length; i+=randNumber) {
//....
}
どうすればよいですか?
毎回異なる2〜5の乱数を生成する必要があります。たとえば、2つの3を連続して、2つを5つ続けてはいけません。これを次のようにfor()ループに入力する必要があります。毎回異なる乱数を生成する
for(var i = 0; i < noBoxes.length; i+=randNumber) {
//....
}
どうすればよいですか?
N-1の乱数を生成し、それを追加し、(minが0ではないのでシフト)元の範囲を法:
i = some random int from 2 to 5
delta = randInt(3) // range of possible values from 2 to 5 is 4, minus 1 to
// prevent getting all the way round to i again
nextval = (i-2+delta)%4+2 // shift i down by the minimum, add the
// delta and modulo the range
それは範囲を下回る1に加算するので、これが機能します元の番号に戻ることはできません。たとえば、i = 3、ランダムint 0〜2ですので、maxは(i-2 + 2)%3 + 2 = 3%3 + 2 = 0 + 2 = 2です。
function differentRandInt(min,max,current) {
var shiftedcurrent = current-min;
var range = max-min+1;
var delta = Math.floor((Math.random()*(range-1))+1);
return (shiftedcurrent + delta)%range + min;
}
I = 3あれば、次いで、I-minは、そう分を追加する米国4を与え、デルタを追加した後範囲はモジュロ4 2,3,0を得、2,3,4であり、1であります5,2。
これは、OPが避けようとしていることをどのように回避するのですか? –
デルタは、範囲(2〜5)以下に制限されています。実際には、衝突すると値を再生成せずに、現在の値を除くすべての値の範囲を減らします。 –
あなたのコードには少し誤りがあると思いますが、現在は上限が生成されません。 – Yoshi
編集:より完全なソリューション、および固定off-by-oneエラー:これと同様に
var prev, randNumber;
for(var i = 0; i < noBoxes.length; i+=randNumber) {
do {
randNumber = 2 + Math.floor(Math.random() * 4);
} while(randNumber === prev);
prev = randNumber;
}
私のために働かなかった。複数のことを繰り返す。 – j08691
これは、非常に多くのポイントで同じ番号を連続して生成します。 – Amberlamps
ええと、より完全な解決策に更新されました。 – jmar777
var loopingValues = [2, 3, 4, 5],
len,
value,
rand;
while ((len=loopingValues.length)) {
rand = ~~((Math.random() % 1) * len);
value = loopingValues.splice(rand, 1)[0];
//alert(value)
}
今、あなたはランダムに値2, 3, 4 and 5
としてvalue
を使用してループを持っています注文。読んで
または、より簡単に:http://jsbin.com/ejizuw/
var loopingValues = [2, 3, 4, 5],
value,
rand;
while (loopingValues.length) {
rand = Math.random();
if (rand === 1) {
rand = 0;
}
rand = rand * loopingValues.length;
rand = Math.floor(rand);
value = loopingValues[rand];
loopingValues.splice(rand, 1);
alert(value);
}
あなたはlooping-
var noBoxes={length:100};
var R= [2], r= 2, n= 2;
while(R.length<noBoxes.length){
n= R[R.length-1];
while(r== n) r= 2+Math.floor(Math.random()*4)
R.push(r);
}
And then loop through the array-
for(var i = 0; i < noBoxes.length; i+=R[i]) {
....
}
を開始する前に、アレイ内のあなたのシリーズを得ることができます「私は、行に2人の3人の者を望んでいません、または2つの5が並んでいます。 - それはランダムではありません:) – jbabey
数字のリストから乱数を求めて、それを持っていたらリストからこの数字を削除しますか? – andlrc
jbabey:均等に分散した無相関の乱数ではありませんが、まだ確率的です。 –