0

我正在使用 arc4random 生成一个随机数。我想生成一个 1-9 之间的数字。如何排除 0?

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

4 回答 4

15

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

于 2011-04-06T02:52:21.633 回答
5

您可以使用arc4random_uniform(), 如

arc4random_uniform(9) + 1

通常,要生成介于lohi(含)之间的数字,请使用:

arc4random_uniform(hi - lo + 1) + lo

如果您不想使用arc4random_uniform()并坚持使用arc4random(),请注意使用模数公式的结果值不是均匀分布的,请使用

(arc4random() % (hi - lo + 1)) + lo
于 2011-04-06T08:34:06.713 回答
1

int r = arc4random() % 8 + 1;

请参阅其他答案(例如,来自我的答案),了解您可能不想%用于此任务的原因,以及您应该使用什么。

于 2011-04-06T02:52:11.200 回答
1

您可以简单地反复尝试,直到获得所需范围内的数字,然后丢弃您不想要的数字。这在数学中有一个花哨的名称“接受-拒绝方法”。这很简单,而且有效。

如果您担心这可能需要很长时间,理论上可以。但是这种方法一直在统计应用中使用。通过一个while循环N次的概率随着N的增加而迅速减小,因此通过循环的平均次数很小。

于 2011-04-06T03:31:58.783 回答