dポイントプレゼントキャンペーン実施中!

JavaScript初心者です。
配列にランダムな数字を入れたいのですが、

aRnd = new Array();
aRnd[0] = Math.floor(Math.random()*100);
aRnd[1] = Math.floor(Math.random()*100);
aRnd[2] = Math.floor(Math.random()*100);

のようにやると各配列にはランダムな数字が入りますが、重複が発生する可能性があります。これを重複が発生しないようにしたいのですが、どのようにすればいいのでしょうか?
なお、上記例では0~99までの数字を3つの配列にセットする方法となっていますが、配列数や数字の最大値は変更する可能性があるので、これも配慮したいと思います。
よろしくお願いいたします。

A 回答 (4件)

アルゴリズム的なアドバイスしかできませんが、参考になればと思います。



値をaRnd[n]に入れた後に、aRnd[0]~aRnd[n-1]とanRnd[n]を比較していきます(IFとかforを使う)。
同じ値が見つかった場合、nを-1してもう一度実行しなおせばいけます。
    • good
    • 0
この回答へのお礼

ありがとうございました。No1さんのアドバイスと合わせて考えてみたところ、うまくいきました。

お礼日時:2006/07/16 22:29

#3>this.data = new Array(100);


は、
this.data = new Array(n);
の間違いorz
    • good
    • 0

function FixedRand(n){


this.data = new Array(100);
for(var i=0;i<n;i++){
this.data[i]=i;
}
}
FixedRand.prototype.Next = function(){
var size = this.data.length;
if(size == 0)
return Number.NaN;

var pos = Math.floor(size*Math.random());
var wk = this.data[size-1];
this.data[size-1]=this.data[pos];
this.data[pos]=wk;
return this.data.pop();
}

var FR = new FixedRand(100);

aRnd = new Array();
aRnd[0] = FR.Next();
aRnd[1] = FR.Next();
aRnd[2] = FR.Next();
    • good
    • 0
この回答へのお礼

ありがとうございました。こちらは関数を使う方法ですね。JavaScript初心者の私には高度すぎて、理解できない部分がありますが、勉強のためにこちらも参考にさせていただきます。

お礼日時:2006/07/16 22:32

俺はJavascript書ける人間じゃないので文法がそもそもなってないかもしれない(実際に動作確認してない)


n = 2;
a = -1;
b = 0;
i = 0
while(i<n+1)
{
a = Math.floor(Math.random()*100);
for(j= 1;j>i;j++;)
{
if(a == aRnd[j]){
b = 1;
}

}
if(b==0){
aRnd[i] = a;
a = -1;
b = 0;
i=i+1;
}

}
    • good
    • 0
この回答へのお礼

ありがとうございました。No2さんのアドバイスと合わせて考えてみたところ、うまくいきました。

お礼日時:2006/07/16 22:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!