-1

这是我的代码:

secretPointX = (arc4random() % 600) + 400;
secretPointY = (arc4random() % 350) + 250;

我将它们用作坐标,并使用毕达哥拉斯定理将它们用作圆的半径。我的问题是它不会在 400-600 和 250-350 之间生成随机数。它生成指定范围之外的数字。怎么了?

4

2 回答 2

4

模除法为您提供剩余的操作。简单地说,当你像这样使用它时,它会给你一个从 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;
于 2013-03-02T18:28:54.770 回答
3

您正在生成一个介于零(包括)和 600(不包括)之间的随机数,然后添加 400。这自然会产生一个介于 400 和 999 之间的数字。请改用以下内容:

secretPointX = (arc4random() % 201) + 400;

您还可以使用arc4random_uniform(201)获取 0 到 200 之间的随机数,而无需进行模运算。

于 2013-03-02T18:26:04.247 回答