如何在arc4random中排除数字?

时间:2011-04-06 02:47:25

标签: objective-c c random integer arc4random

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

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

4 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:5)

您可以使用arc4random_uniform(),如

arc4random_uniform(9) + 1

通常,要生成lohi(包括)之间的数字,请使用:

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次循环的概率会迅速下降,因此通过循环的平均次数很少。