Objective c 使用arc4random()生成的范围不正确

Objective c 使用arc4random()生成的范围不正确,objective-c,random,Objective C,Random,这是我的代码: secretPointX = (arc4random() % 600) + 400; secretPointY = (arc4random() % 350) + 250; 我用它们作为坐标,用毕达哥拉斯定理计算圆的半径。我的问题是它不会生成介于400-600和250-350之间的随机数。它生成指定范围以外的数字。怎么了 您正在生成一个介于0(包括)和600(不包括)之间的随机数,然后再向其中添加400。这自然会产生一个介于400和999之间的数字。改用类似的方式: secret

这是我的代码:

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

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

您正在生成一个介于0(包括)和600(不包括)之间的随机数,然后再向其中添加400。这自然会产生一个介于400和999之间的数字。改用类似的方式:

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

您也可以使用arc4random_uniform(201)来获得介于0和200之间的随机数,而无需进行模运算。

模除法为您提供运算的剩余部分。简单地说,当您像这样使用它时,它会给您一个从0到比右侧操作数少1的数字。你得到的数字是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;

它工作正常。你不正确地使用它是为了你想要的东西。不要使用这样严重误导的标题
arc4random()
工作正常。使用它的代码没有。对不起,这就是我问的原因。如果我知道这不是arc4random,那我就不会问了。请注意,范围是半开的,因此永远不会生成1000。它只是给了我一个巨大的数字,你会想要
arc4random\u uniform(max-min+1)+min
,因为
arc4random\u uniform
返回范围“0.(val-1)”中的值。@jimmyyyyxa:是的,带着rmaddy刚才评论的警告;在这个范围内加1,否则你只会得到400-599之间的数字。是的,但它仍然会给我一个巨大的数字,比如7485835。超出范围