2009-07-01 17 views
0

1から100までのランダムな整数を必要とする非常に簡単なiPhoneアプリケーションがあります。乱数関数が失火しています

私は乱数関数を呼び出して表示するボタンを持っています。

-(IBAction)buttonReleased; 
{ 
    srandom(time(NULL)); 
    int theNum = random() % 100 + 1; 
    numberDisplay.text = [NSString stringWithFormat:@"%d", theNum]; 
} 

問題は、ボタンをすばやく押すと、新しい乱数が表示されないことがあります。

答えて

8

問題は、timeでシードしていることです。

timeは1秒ごとに更新されるため、秒以内にクリックすると、同じ番号を持つジェネレータが生成されます。つまり、同じ番号が表示されます。

アプリケーションの開始時に初めて播種してください。

+0

doh!初心者のエラー#31415とカウント。ありがとう。 – willc2

+1

また、時間よりも精度の高いものを植え付けるべきです。試してみてください(CFAbsoluteTimeGetCurrent()* 1000) – rpetrich

+0

なぜ、私はアプリ開始時に1回だけシードしていますか?私は学びたい。 – willc2

3
srandom(time(NULL)); 

乱数を生成するたびにそのようにしないでください。アプリケーションが起動すると、一度やり直してください。

理由:特定の番号のsrandom()を呼び出すたびに、random()から同じ擬似乱数のシーケンスが返されます。したがって、同じ秒で関数を2回呼び出すと、同じ数が返されます。

関連する問題