为什么不使用一个数组值?处理3(java)
我正在为我将要制作的游戏创建一个随机地下城生成器。我只是勉强做了一些基本的工作。为了避免为我绘制的20个不同的矩形绘制20个不同的变量,我使用了两个名为rx和ry的数组。然而,当我使用以下方法绘制矩形时:为什么不使用一个数组值?处理3(java),java,arrays,processing,Java,Arrays,Processing,我正在为我将要制作的游戏创建一个随机地下城生成器。我只是勉强做了一些基本的工作。为了避免为我绘制的20个不同的矩形绘制20个不同的变量,我使用了两个名为rx和ry的数组。然而,当我使用以下方法绘制矩形时: rect(rx[19], rx[19], 50, 50) 它没有把最后一个矩形放在正确的位置。它总是将矩形19设置为0,0,而不是设置为代码确定的值。我不完全确定它实际上是矩形19,但我假设是。我使用以下方法制作了两个阵列: int[] rx = new int[20]; 及 什么都行。这
rect(rx[19], rx[19], 50, 50)
它没有把最后一个矩形放在正确的位置。它总是将矩形19设置为0,0,而不是设置为代码确定的值。我不完全确定它实际上是矩形19,但我假设是。我使用以下方法制作了两个阵列:
int[] rx = new int[20];
及
什么都行。这里是我的代码的其余部分,以防它会有用,但是,如果您希望我只给出重要的部分,请告诉我。谢谢
int gx = 400;
int gy = 400;
int gDir;
int gCheckX;
int gCheckY;
int[] rx = new int[20];
int[] ry = new int[20];
int i = 0;
void setup() {
size(700, 700);
}
void draw() {
fill(0);
rect(0, 0, width, height);
fill(#696969);
if(i < 19) {
i++;
gDir = int(random(1, 5));
if(gDir == 1) {
gCheckX = 25;
gCheckY = -25;
}
if(gDir == 2) {
gCheckX = 25;
gCheckY = 75;
}
if(gDir == 3) {
gCheckX = -25;
gCheckY = 25;
}
if(gDir == 4) {
gCheckX = 75;
gCheckY = 25;
}
while(get(gCheckX, gCheckY) == color(105, 105, 105)) {
gDir = int(random(1, 5));
if(gDir == 1) {
gCheckX = 25;
gCheckY = -25;
}
if(gDir == 2) {
gCheckX = 25;
gCheckY = 75;
}
if(gDir == 3) {
gCheckX = -25;
gCheckY = 25;
}
if(gDir == 4) {
gCheckX = 75;
gCheckY = 25;
}
}
if(gDir == 1) {gy -= 50;}
if(gDir == 2) {gy += 50;}
if(gDir == 3) {gx -= 50;}
if(gDir == 4) {gx += 50;}
rx[i] = gx;
ry[i] = gy;
println(rx[i] + " " + ry[i]);
}
else {
rect(rx[0], ry[0], 50, 50);
rect(rx[1], ry[1], 50, 50);
rect(rx[2], ry[2], 50, 50);
rect(rx[3], ry[3], 50, 50);
rect(rx[4], ry[4], 50, 50);
rect(rx[5], ry[5], 50, 50);
rect(rx[6], ry[6], 50, 50);
rect(rx[7], ry[7], 50, 50);
rect(rx[8], ry[8], 50, 50);
rect(rx[9], ry[9], 50, 50);
rect(rx[10], ry[10], 50, 50);
rect(rx[11], ry[11], 50, 50);
rect(rx[12], ry[12], 50, 50);
rect(rx[13], ry[13], 50, 50);
rect(rx[14], ry[14], 50, 50);
rect(rx[15], ry[15], 50, 50);
rect(rx[16], ry[16], 50, 50);
rect(rx[17], ry[17], 50, 50);
rect(rx[18], ry[18], 50, 50);
rect(rx[19], ry[19], 50, 50);
}
}
得到了@Jeremy Kahan的回答。我只需将I设置为-1,它就自行修复了 既然这是我的答案,我就把它写下来作为一个答案。关键是初始化int i=-1;而不是int i=0
它之所以有效,是因为您在if块中做的第一件事是i++,您使用的是1、2、3、…、18和19,但从未使用索引0。从-1开始,修正了这一点,因此您处理了所有20个索引为0到19的条目。rx[19]似乎没有设置,因为您的if i<19,所以当我设置为20时,它会给我一个错误ArrayIndexOutOfBoundsException。哦,我明白了,因为i++。你说得对。如果从int i=-1开始呢?因为否则rx[0]从哪里得到setOh呢!我不知道它是怎么工作的,但太棒了,谢谢你!为什么它有一个java标记?语言。是类似c的,但不是java。它之所以有效,是因为您在if块中做的第一件事是i++,您使用的是1、2、3、…、18和19,但从未使用索引0。从-1开始修复了这一点,因此您可以处理索引为0到19的所有二十个条目,或者您可以将i++放在循环的末尾,或者使用实for循环。
int gx = 400;
int gy = 400;
int gDir;
int gCheckX;
int gCheckY;
int[] rx = new int[20];
int[] ry = new int[20];
int i = 0;
void setup() {
size(700, 700);
}
void draw() {
fill(0);
rect(0, 0, width, height);
fill(#696969);
if(i < 19) {
i++;
gDir = int(random(1, 5));
if(gDir == 1) {
gCheckX = 25;
gCheckY = -25;
}
if(gDir == 2) {
gCheckX = 25;
gCheckY = 75;
}
if(gDir == 3) {
gCheckX = -25;
gCheckY = 25;
}
if(gDir == 4) {
gCheckX = 75;
gCheckY = 25;
}
while(get(gCheckX, gCheckY) == color(105, 105, 105)) {
gDir = int(random(1, 5));
if(gDir == 1) {
gCheckX = 25;
gCheckY = -25;
}
if(gDir == 2) {
gCheckX = 25;
gCheckY = 75;
}
if(gDir == 3) {
gCheckX = -25;
gCheckY = 25;
}
if(gDir == 4) {
gCheckX = 75;
gCheckY = 25;
}
}
if(gDir == 1) {gy -= 50;}
if(gDir == 2) {gy += 50;}
if(gDir == 3) {gx -= 50;}
if(gDir == 4) {gx += 50;}
rx[i] = gx;
ry[i] = gy;
println(rx[i] + " " + ry[i]);
}
else {
rect(rx[0], ry[0], 50, 50);
rect(rx[1], ry[1], 50, 50);
rect(rx[2], ry[2], 50, 50);
rect(rx[3], ry[3], 50, 50);
rect(rx[4], ry[4], 50, 50);
rect(rx[5], ry[5], 50, 50);
rect(rx[6], ry[6], 50, 50);
rect(rx[7], ry[7], 50, 50);
rect(rx[8], ry[8], 50, 50);
rect(rx[9], ry[9], 50, 50);
rect(rx[10], ry[10], 50, 50);
rect(rx[11], ry[11], 50, 50);
rect(rx[12], ry[12], 50, 50);
rect(rx[13], ry[13], 50, 50);
rect(rx[14], ry[14], 50, 50);
rect(rx[15], ry[15], 50, 50);
rect(rx[16], ry[16], 50, 50);
rect(rx[17], ry[17], 50, 50);
rect(rx[18], ry[18], 50, 50);
rect(rx[19], ry[19], 50, 50);
}
}