這是我的代碼:範圍是不正確的
secretPointX = (arc4random() % 600) + 400;
secretPointY = (arc4random() % 350) + 250;
我使用這些作爲座標,並將其用於使用勾股定理一個圓的半徑。我的問題是,它不會產生範圍400-600和250-350之間的隨機數。它會生成指定範圍之外的數字。哪裏不對?
這是我的代碼:範圍是不正確的
secretPointX = (arc4random() % 600) + 400;
secretPointY = (arc4random() % 350) + 250;
我使用這些作爲座標,並將其用於使用勾股定理一個圓的半徑。我的問題是,它不會產生範圍400-600和250-350之間的隨機數。它會生成指定範圍之外的數字。哪裏不對?
Modulo部門爲您提供操作的其餘部分。簡單地說,當你像這樣使用它時,它會給你一個從0到小於右手操作數的數字。你得到的數字高達599,然後將其添加到400
你應該這樣做:
u_int32_t max = 600;
u_int32_t min = 400;
u_int32_t result = (arc4random % (max - min) + 1) + min;
,或者更好,
arc4random_uniform(max - min + 1) + min;
您正在生成一個介於零(包含)和600(不包括)之間的隨機數,然後將400添加到它。這自然會導致一個數字,是400和999使用的東西之間的這樣的替代:
secretPointX = (arc4random() % 201) + 400;
您還可以使用arc4random_uniform(201)
獲得零和200之間的隨機數沒有做模運算。
它工作正常。你正在使用它不正確的你想要的。 – 2013-03-02 18:27:37
請勿使用如此令人生厭的誤導性標題。 'arc4random()'工作得很好。使用它的代碼不會。 – 2013-03-02 18:28:51
抱歉,這就是我爲什麼問的原因。如果我知道這不是arc4random錯誤,我不會問。 – JimmyYXA 2013-03-02 18:44:31