数学 以前とかぶらない乱数 1


だめだ・・・・

頭働かない・・・・眠い、眠らせて

で、前に出た乱数とかぶらない様に
乱数をだす時のものを、forループとかで作るなら
こうかな???

[as3]

//Math.floorはもっとも近い自然数
//Math.randomとの使い方は、{ Math.random()*( 最大値-最小値+1 ) } + 最小値
var maxVal = 30;
var minVal = 0;
//まず一度、乱数範囲と関係ない数値を入れておく
var numArray:Array = new Array(maxVal+1);
var num:Number;

var checkNum:Boolean = true;

for(var i=0; i < maxVal; i++){

//フラグをリセット」
checkNum = true;

//前のNumberとかぶっていなければ
while ( checkNum )
{
//乱数を作成
num = Math.floor( ( Math.random()*(maxVal-minVal+1) ) + minVal );//end floor
//配列内に以前乱数があるか?? こんな方法でいいのかな?
//無ければwhileを終了
if ( numArray.indexOf(num) == -1 ) checkNum = false;

//trace(numArray.indexOf(num))
};//while end

trace(num)

//今回の乱数を配列に格納
numArray.push(num);

//trace(numA)//end trace

};//for end

[/as3]

・・・・あってるかな??

だめだ、もうねる

追記修正、やっぱり間違っていた
上のやつで、配列を作っている部分で、配列のサイズを指定している
ほかforループの比較方法に問題あり

なおしたモノはこれ

[as3]

//Math.floorはもっとも近い自然数
//Math.randomとの使い方は、{ Math.random()*( 最大値-最小値+1 ) } + 最小値
var maxVal = 30;
var minVal = 0;
//乱数範囲と関係のない数字
var numArray:Array = new Array();
var num:Number;

var checkNum:Boolean = true;

for(var i=0; i <= maxVal; i++){

//フラグをリセット」
checkNum = true;

//前のNumberとかぶっていなければ
while ( checkNum )
{
//乱数を作成
num = Math.floor( ( Math.random()*(maxVal-minVal+1) ) + minVal );//end floor

//配列内に以前乱数があるか?? こんな方法でいいのかな?
//無ければwhileを終了
if ( numArray.indexOf(num) == -1 )
{
checkNum = false;
//今回の乱数を配列に格納
numArray.push(num);
}//if end

//trace(numArray.indexOf(num))
};//while end

trace(num)

//trace(numA)//end trace

};//for end

trace(numArray)

//配列をソート
numArray.sort();
trace(numArray)

[/as3]

でも、この方法って、確率上変な動作起こしそうだな
数学的に、前の乱数とかぶらないように
乱数を出すにはどうすればいいのだろう?

・・・・・んーー


Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

One thought on “数学 以前とかぶらない乱数