你怎么能不允许使用arc4random函数选择一些nubers?arc4random除了一些数字
当前代码:
int random = (arc4random() % 92);
(数字从0到92)
我希望它也禁止下列号码:31, 70, 91, 92
你怎么能不允许使用arc4random函数选择一些nubers?arc4random除了一些数字
当前代码:
int random = (arc4random() % 92);
(数字从0到92)
我希望它也禁止下列号码:31, 70, 91, 92
首先,你需要改变
% 92
到
% 93
从0..92
得到的数字我会做这样的事情
int random;
do {
random = arc4random() % 93;
}
while (random == 31 || random == 70 || random == 91 || random == 92);
简单,继续要求数字:
get a new random number
while the new number is one of the disallowed ones:
get a new random number
return the random number
伪代码,但你应该明白这个主意。
是的,明白了。 :) – Emil 2010-02-26 20:51:09
如果你打算不允许数字91和92,为什么还要把它们包含在你的mod中呢?
扩大在以前的答案:
int random;
do {
random = arc4random() % 91;
}
while (random == 31 || random == 70);
@harwig - 我也在想这个。但是,尽管从编码和执行的角度来看,它们的效率较低,但它们可以用来记录我们明确排除这些值的事实,以防有人决定在几年后改变模数。 – 2010-02-26 21:02:29
@鲍勃考夫曼 - 非常好的一点,因为我相信这可能是未来令人头疼的一个潜在原因。 – harwig 2010-03-01 14:03:21
解决方案斯威夫特:
func randomValue(except: Int) -> Int {
var rand: Int = 0;
repeat {
rand = Int(arc4random_uniform(3) + 1)
}
while(rand == except)
return Int(rand)
}
谢谢,这适用于一个例外,但不适用于例外列表! :) – Emil 2017-08-06 20:33:40
啊,对不起,原来的代码指望一个数组,我知道数组有多少个对象了,所以我只是写了,而不是:) 帮我理解代码;基本上它是做一个随机数字,如果这个数字是其中的任何一个,那么得到一个新的?谢谢(: – Emil 2010-02-26 20:50:38
@Emil - 正确。如果它是一个不允许的值,只需再次调用该方法。 – 2010-02-26 21:01:11
太棒了!:)谢谢代码正在工作:) – Emil 2010-02-26 21:50:15