我使用arc4random生成一个随机数。我想在1-9之间生成一个数字。如何排除0?
int r = arc4random() % (9);
NSLog(@"Random Number: %d",r);
答案 0 :(得分:15)
int r = (arc4random() % 8) + 1
答案 1 :(得分:5)
您可以使用arc4random_uniform()
,如
arc4random_uniform(9) + 1
通常,要生成lo
和hi
(包括)之间的数字,请使用:
arc4random_uniform(hi - lo + 1) + lo
如果您不想使用arc4random_uniform()
并希望坚持使用arc4random()
,请注意使用模数公式的结果值不是均匀分布的,请使用
(arc4random() % (hi - lo + 1)) + lo
答案 2 :(得分:1)
int r = arc4random()%8 + 1;
请参阅其他答案(例如,one from me),了解您可能不希望%
执行此任务的原因,以及您应该使用的内容。
答案 3 :(得分:1)
你可以简单地重复尝试,直到你得到你想要的范围内的数字,抛出你不想要的数字。这在数学中有一个奇特的名称“接受拒绝方法”。它很简单,而且很有效。
如果你担心这可能需要很长时间,理论上它可以。但这种方法一直在统计应用中使用。当N增加时,经过N次循环的概率会迅速下降,因此通过循环的平均次数很少。