Случайное число с модулем в Objective C - PullRequest
1 голос
/ 24 июня 2010

У меня есть очень простая функция случайных чисел, которая генерирует случайное число из диапазона;

е:

// The random is seeded earlier on in the applicationDidFinishLaunching() function
-(NSUInteger)makeRandomNumber:(NSUInteger)minNumber to:(NSUInteger)maxNumber
{
 //NSUInteger i = (NSUInteger)( (random() / (double)RAND_MAX) * y);

 NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 return i;
}

Я хочу добавить необязательную операцию модуля к этой функции, чтобы вы возвращали только те числа, которые являются модулем чего-либо.

Я хочу сделать это, чтобы генерировать заработную плату для случайных людей, и я считаю, что заработная плата в этом раунде с 5 или 0 гораздо более читабельной.

Я не уверен, как сделать необязательный параметр или заставить рандомизацию продолжать цикл до тех пор, пока не будет найдено необязательное значение модуля.

Другая проблема заключается в том, что иногда цикл может продолжаться вечно, если нет модуля для поиска.

т;

Произведите рандомизацию между 0 и 100 и верните значение, которое является модулем 5.

РЕДАКТИРОВАТЬ: Это должно работать с любым диапазоном, независимо от того, что мин или макс. Приведенные выше цифры являются лишь примерами.

Ответы [ 3 ]

3 голосов
/ 24 июня 2010

ITYM , кратное из 5. Для вашего примера вы просто сгенерируете случайное значение от 0 до 20, а затем умножите его на 5.

0 голосов
/ 24 июня 2010

Целочисленное деление гарантирует, что ваше число будет кратно roundNumber, только если оно усекает десятичное число в делении, а затем восстанавливает исходное округленное число в умножении.

// The random is seeded earlier on in the applicationDidFinishLaunching() function
-(NSUInteger)makeRandomNumber:(NSUInteger)minNumber to:(NSUInteger)maxNumber round:(NSUInteger) roundNumber
{   
 NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 return (i / roundNumber) * roundNumber;
}
0 голосов
/ 24 июня 2010

Я думаю, что цикл будет работать достаточно хорошо:

 NSUInteger i = 0;
 do {
   NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; 
 } while(i % 5 != 0);
...