这是我的代码:
secretPointX = (arc4random() % 600) + 400;
secretPointY = (arc4random() % 350) + 250;
我将它们用作坐标,并使用毕达哥拉斯定理将它们用作圆的半径。我的问题是它不会在 400-600 和 250-350 之间生成随机数。它生成指定范围之外的数字。怎么了?
这是我的代码:
secretPointX = (arc4random() % 600) + 400;
secretPointY = (arc4random() % 350) + 250;
我将它们用作坐标,并使用毕达哥拉斯定理将它们用作圆的半径。我的问题是它不会在 400-600 和 250-350 之间生成随机数。它生成指定范围之外的数字。怎么了?
模除法为您提供剩余的操作。简单地说,当你像这样使用它时,它会给你一个从 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)
获取 0 到 200 之间的随机数,而无需进行模运算。