我将如何在Java中迭代不同大小的二维数组?

时间:2016-12-28 13:28:47

标签: java multidimensional-array

我目前正在创建一个破砖者(或突破,如atari突破)和使用二维数组的砖块:

private Brick bricks[][] = new Brick[10][41];

要销毁一个特定的Brick(无论出于什么原因我必须销毁它),我创建了一个方法:

public void destroyBrick(Brick brick) {
    for(int x = 0; x < bricks[x].length; x++) {
        for(int y = 0; y < bricks[y].length; y++) {
            if (bricks[x][y].equals(brick)) {
                bricks[x][y] = null;
            }
        }
    }
}

创建数组的方式如下:

for(int j=0; j<bricks[0].length; j++){ 
  for(int i=0; i<bricks.length; i++){ 
    bricks[i][j]=new Brick(game,10,Color.GREEN,j*margin,i*margin); 
  }
}

现在由于某种原因,x的计数器最终达到10,y的计数器达到0,崩溃,我无法弄清楚原因。

是否有不同的方法来迭代具有不同列和行值的二维数组?

注意 格式化和我的拼写是如此垃圾的原因是,我在应用程序版本上写这个。在我能够之前,请随意纠正任何错误或格式化错误。

3 个答案:

答案 0 :(得分:4)

您在迭代它的循环中引用y。这是正确编译的,因为y是在引用点定义的,但它并不能满足您的需要。此外,外部循环应在到达bricks.length时停止,而不是bricks[x].length

这两行

for(int x = 0; x < bricks[x].length; x++) {
    for(int y = 0; y < bricks[y].length; y++) {

应该是

for(int x = 0; x < bricks.length; x++) {
//                       ^
    for(int y = 0; y < bricks[x].length; y++) {
    //                        ^

答案 1 :(得分:3)

我认为第一个int x并不是指你需要的东西。 x的范围从0到用x索引的数组的长度,即41。

for (int x = 0; x < bricks.length; x++)
    for (int y = 0; y < bricks[x].length; y++)

应该工作(至少我是在没有测试的情况下写的)

答案 2 :(得分:1)

尝试使用任何

进行迭代
public void destroyBrick(Brick brick) {
    for(int x = 0; x < bricks.length; x++) {
        for(int y = 0; y < bricks[0].length; y++) {
            if (bricks[x][y].equals(brick)) {
                bricks[x][y] = null;
            }
        }
    }
}

public void destroyBrick(Brick brick) {
    for(int x = 0; x < bricks.length; x++) {
        for(int y = 0; y < bricks[x].length; y++) {
            if (bricks[x][y].equals(brick)) {
                bricks[x][y] = null;
            }
        }
    }
}

如果还有其他错误,请使用调试器找出确切的位置