2014-02-12 57 views
0

我正在使用arc4random生成一個隨機數。我生成一個介於0和2之間的數字。這是遊戲循環中顏色變化的標識符。如果該數字等於1,則下列代碼 應排除數字1. 我該如何做到這一點?取出範圍內的數字arc4random()%x

int x = arc4random()%3; 
+1

所以你想隨機得到一個0或2?如果是這種情況,爲什麼不做arc4random()%2,如果結果是1,那麼給它加1?另外,通常使用'arc4random_uniform'生成0和邊界之間的隨機數字會更好,因爲這會產生統一的數字,而執行'%'不會。 –

回答

1

有兩種主要方法可以做到這一點。

的簡單,但潛在的低效率:

int x; 
do { 
    x = arc4random() % 3; 
} while (x == 1); 

或稍微更復雜,但是更具有確定性:

int x = arc4random() % 2; 
if (x > 0) x++; 
+0

不要用數字生成器的第一種方式,它實際上是隨機的,它永遠不會保證從while循環中出來。 –

+0

是的,我採取了第二種方式,這是如此簡單,我很慚愧,我沒有得到自己:D –

1

排除:

uint32_t identifier = 1; // << the number to exclude 
uint32_t NIdentifiers = 1; 
uint32_t NNumbers = 3; 
uint32_t NPossibleIdentifiers = NNumbers - NIdentifiers; 

uint32_t result = arc4random_uniform(NPossibleIdentifiers); 
if (identifier == result) 
++result; 

注:贊成arc4random_uniform超過arc4random並以模爲單位。