一様分布の乱数を取得する必要があります。問題は、アプリが MAX 番号のチェックを開始するたびに必要であり、同じ番号を (切り上げまで) 2 回渡すことなく、0 から MAX までのすべての番号をランダムに処理することです。
今私が使用している: arc4random()%maxNumber
しかし、それは本当に問題です。なぜなら、同じ数字が連続して3回も返ってくるからです。
助けてください。
一様分布の乱数を取得する必要があります。問題は、アプリが MAX 番号のチェックを開始するたびに必要であり、同じ番号を (切り上げまで) 2 回渡すことなく、0 から MAX までのすべての番号をランダムに処理することです。
今私が使用している: arc4random()%maxNumber
しかし、それは本当に問題です。なぜなら、同じ数字が連続して3回も返ってくるからです。
助けてください。
1) 乱数を取得
2) while (number is in used set) number = (number + 1) % MAX
3) 使用済みセットに番号を追加
これは、一意の乱数を取得するための標準的なアルゴリズムです
これは私が最終的にやったことです:
-(NSInteger)getNextRandomNumber :(NSInteger)maxNumber{
if (indexSet == nil){
indexSet = [[NSMutableIndexSet alloc] init];
}
if ([indexSet count] >= maxNumber){
[indexSet init];
}
NSInteger randomGen = arc4random_uniform(maxNumber);
BOOL foundNumber = FALSE;
while (!foundNumber) {
if ([indexSet containsIndex:randomGen]){
randomGen = arc4random_uniform(maxNumber);
}else{
[indexSet addIndex:randomGen];
foundNumber = TRUE;
}
}
return randomGen;
}
使用する場合は、オブジェクトの解放に注意してください。また、私の場合は 1 つの数字を逃す可能性があると思います (よくわかりません)。それは問題ではありません...