Как исключить числа в arc4random? - PullRequest
0 голосов
/ 06 апреля 2011

Я использую arc4random для генерации случайного числа.Я хотел бы создать число от 1 до 9.Как я могу исключить 0?

int r = arc4random() % (9);
    NSLog(@"Random Number: %d",r);

Ответы [ 4 ]

15 голосов
/ 06 апреля 2011

int r = (arc4random() % 8) + 1

5 голосов
/ 06 апреля 2011

Вы можете использовать arc4random_uniform(), как в

arc4random_uniform(9) + 1

Обычно для генерации числа от lo до hi (включительно) вы используете:

arc4random_uniform(hi - lo + 1) + lo

Если вы не хотите использовать arc4random_uniform() и хотите придерживаться arc4random(), отметив, что полученное в результате использования формулы модуля значение не распределено равномерно, используйте

(arc4random() % (hi - lo + 1)) + lo
1 голос
/ 06 апреля 2011

Вы можете просто повторять попытки, пока не получите число в нужном диапазоне, выбрасывая ненужные числа. Это имеет причудливое название «метод принятия-отклонения» в математике. Все просто и работает.

Если вы беспокоитесь, что это может занять много времени, теоретически это может быть. Но этот подход все время используется в статистических приложениях. Вероятность прохождения цикла while в N раз быстро уменьшается с увеличением N, поэтому среднее число циклов в цикле мало.

1 голос
/ 06 апреля 2011

int r = arc4random ()% 8 + 1;

См. Другие ответы (например, один от меня ), почему вы, вероятно, не хотите использовать % дляэто задание, и что вы должны использовать вместо этого.

...