2016-12-28 62 views
1

我目前正在創建一個打磚塊(或突破,如突破雅達利)和磚塊即時通訊使用二維數組:我將如何遍歷Java中不同大小的2d數組?

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

摧毀特定磚(不管是什麼原因,我不得不銷燬)我創建了一個方法:

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的計數器最終達到ES 10和計數器達到0,它崩潰,我不明白爲什麼。

是否有不同的方式迭代2d數組,其列和行的值不同?

note 格式化和我的拼寫如此垃圾的原因是,即時消息寫在應用程序版本。在我可以之前,請隨時糾正任何錯誤或格式錯誤。

回答

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++) { 
    //      ^
+0

這會拋出相同的錯誤,在迭代的稍後(所以x是9,y是40) – Reteras

+0

@Reteras'(9,40)'是一對有效的索引,你確定你的數組已被正確初始化(即磚塊[9]'裏面有一個非'null'數組)? – dasblinkenlight

+0

它的工作表示感謝!現在不用處理空指針,結果是:| – Reteras

3

第一INT X並不是指你需要什麼,我想。 x的範圍從0到其中x索引的陣列的長度,即41

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

應工作(至少我寫這個未經測試)

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

如果有任何其他錯誤,請使用調試器找出究竟在哪裏