这是我的代码:范围是不正确的
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