我目前正在创建一个破砖者(或突破,如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,崩溃,我无法弄清楚原因。
是否有不同的方法来迭代具有不同列和行值的二维数组?
注意 格式化和我的拼写是如此垃圾的原因是,我在应用程序版本上写这个。在我能够之前,请随意纠正任何错误或格式化错误。
答案 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;
}
}
}
}
如果还有其他错误,请使用调试器找出确切的位置