2010-02-26 40 views
0

你怎麼能不允許使用arc4random函數選擇一些nubers?arc4random除了一些數字

當前代碼:

int random = (arc4random() % 92);

(數字從0到92)

我希望它也禁止下列號碼:31, 70, 91, 92

回答

9

首先,你需要改變

% 92 

% 93 

從0..92

得到的數字我會做這樣的事情

int random; 

do { 
    random = arc4random() % 93; 
} 
while (random == 31 || random == 70 || random == 91 || random == 92); 
+0

啊,對不起,原來的代碼指望一個數組,我知道數組有多少個對象了,所以我只是寫了,而不是:) 幫我理解代碼;基本上它是做一個隨機數字,如果這個數字是其中的任何一個,那麼得到一個新的?謝謝(: – Emil 2010-02-26 20:50:38

+1

@Emil - 正確。如果它是一個不允許的值,只需再次調用該方法。 – 2010-02-26 21:01:11

+0

太棒了!:)謝謝代碼正在工作:) – Emil 2010-02-26 21:50:15

2

簡單,繼續要求數字:

get a new random number 
while the new number is one of the disallowed ones: 
    get a new random number 
return the random number 

僞代碼,但你應該明白這個主意。

+0

是的,明白了。 :) – Emil 2010-02-26 20:51:09

4

如果你打算不允許數字91和92,爲什麼還要把它們包含在你的mod中呢?

擴大在以前的答案:

int random; 
do { 
    random = arc4random() % 91; 
} 
while (random == 31 || random == 70); 
+2

@harwig - 我也在想這個。但是,儘管從編碼和執行的角度來看,它們的效率較低,但它們可以用來記錄我們明確排除這些值的事實,以防有人決定在幾年後改變模數。 – 2010-02-26 21:02:29

+0

@鮑勃考夫曼 - 非常好的一點,因爲我相信這可能是未來令人頭疼的一個潛在原因。 – harwig 2010-03-01 14:03:21

0

解決方案斯威夫特:

func randomValue(except: Int) -> Int { 
    var rand: Int = 0; 

    repeat { 
     rand = Int(arc4random_uniform(3) + 1) 
    } 
    while(rand == except) 

    return Int(rand) 
} 
+0

謝謝,這適用於一個例外,但不適用於例外列表! :) – Emil 2017-08-06 20:33:40