Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不使用一个数组值?处理3(java)_Java_Arrays_Processing - Fatal编程技术网

为什么不使用一个数组值?处理3(java)

为什么不使用一个数组值?处理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]; 及 什么都行。这

我正在为我将要制作的游戏创建一个随机地下城生成器。我只是勉强做了一些基本的工作。为了避免为我绘制的20个不同的矩形绘制20个不同的变量,我使用了两个名为rx和ry的数组。然而,当我使用以下方法绘制矩形时:

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);
  }
}