1

arc4random()用来生成一定范围内的数字。但是,我会间歇性地收到负数。我没有做任何奇怪的事情:

if([aBug x] == -1) {
    x = arc4random() % columns;
}

if([aBug y] == -1) {
    y = arc4random() % rows;
}

在这里,x有时y会设置为负值。x并且y都是 type int

4

3 回答 3

4

因为arc4random()总是积极的:

arc4random() 函数返回 0 到 (2**32)-1 范围内的伪随机数

[资源]

我将不得不推断columnsrows“任意”否定。用负数修改正数将返回负数。

行和列的数据类型是什么?

于 2012-08-26T19:24:28.220 回答
4

听起来您想将 x 和 y 声明为 typeu_int32_t而不是int. 即,您应该使用无符号变量而不是有符号变量。

或者,使用大于 32 位的有符号整数(例如uint64_t/ long long)。

于 2012-08-26T19:42:07.570 回答
2

我遇到了同样的问题。我不知道为什么这会修复它但从

(int)arc4Random()%4

(int)(arc4Random()%4)

似乎对我有用。

于 2012-09-16T10:16:49.313 回答