お?いけるくさい?

iPhoneアプリエンジニアのたまごです。いっちょまえエンジニア目指してちいさな発見や学んだことを覚え書きしていきます!Objective-C/iOS/開発

乱数の生成(制限値つき)

今回のアプリで乱数取得するんやけど、

 

はじめ

 

//乱数の取得

- (int)getStageNum:(int)min max:(int)max{

    static int randInitFlag;

    if (randInitFlag == 0){

        srand*1;

        randInitFlag = 1;

    }

    return min + (int)(rand()*(max-min+1.0)/(1.0+ RAND_MAX));

}

*/

 

 

 

こんな感じだったの!

まぁ実際意味わからず使ってたよね。

使うときは

[self getStageNum:(int)0 max:10]

みたいな感じで使うわけやけど、

 

これが、なんか毎回ランダムで生成されてはいるけど

似たやつばっかやなーと思って、

ちょっと別のやつを試してみた。

 


 

/*乱数の取得

-(int)rdmstageNum{

//srandom([[NSDate date] timeIntervalSinceReferenceDate]);

    srandom(time(NULL));

    for ( int i = 0; i < 29 ; i++ ) {

    _rnd = round( random() % 29 );//29のとこで最大値を指定してる

        NSLog(@"_rnd = %d",_rnd);

    //_rnd = rand();

    }

    return _rnd;

}

*/

 

 

このとき気をつけるのが、
srandom(time(NULL)); → round( random()
ってところを
srand(time8NULL)); → round( rand()
っても書けるみたいなんやけど、
重要なのは、こういうペアで使う(対応している)
ってことみたい!
ちなみに[NSDate date] timeIntervalSinceReferenceDate]ってのは、
現在時刻を取得している様子!
 
これでもうまく生成できたけど、
もういっこ試してみた。


 

//乱数

-(int)rdmstageNum{

    for(int i=0; i<50; i++){

    _rnd = (arc4random() % 29);//09の数値をランダムに取得

    NSLog(@"rnd =%d",_rnd);

    }

    return _rnd;

}

 
話題の(?)arc4randamを使う方法!
一番短くてすっきり。
ちなみにさっきのやつもfor文50回まわしてるのは
たくさん回したほうがいろいろ出るかなー
って思ったっていうだけです。
 
結局一番下でいくゼ!
これを重複しないようにするかは
今後の方針ということで!