我正在使用arc4random生成一個隨機數。我生成一個介於0和2之間的數字。這是遊戲循環中顏色變化的標識符。如果該數字等於1,則下列代碼 應排除數字1. 我該如何做到這一點?取出範圍內的數字arc4random()%x
int x = arc4random()%3;
我正在使用arc4random生成一個隨機數。我生成一個介於0和2之間的數字。這是遊戲循環中顏色變化的標識符。如果該數字等於1,則下列代碼 應排除數字1. 我該如何做到這一點?取出範圍內的數字arc4random()%x
int x = arc4random()%3;
有兩種主要方法可以做到這一點。
的簡單,但潛在的低效率:
int x;
do {
x = arc4random() % 3;
} while (x == 1);
或稍微更復雜,但是更具有確定性:
int x = arc4random() % 2;
if (x > 0) x++;
不要用數字生成器的第一種方式,它實際上是隨機的,它永遠不會保證從while循環中出來。 –
是的,我採取了第二種方式,這是如此簡單,我很慚愧,我沒有得到自己:D –
排除:
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
並以模爲單位。
所以你想隨機得到一個0或2?如果是這種情況,爲什麼不做arc4random()%2,如果結果是1,那麼給它加1?另外,通常使用'arc4random_uniform'生成0和邊界之間的隨機數字會更好,因爲這會產生統一的數字,而執行'%'不會。 –