2014-02-23 117 views
0

我有一個包含ASCII地圖的二維數組。我有另一個叫botLook()的函數,它需要將地圖的一部分存儲到另一個2D數組中。這是機器人可以看到的地圖的一部分。我已經寫了一個函數到目前爲止,但仍然越界越界錯誤。機器人可以在其自身周圍看到半徑2。將二維數組的一部分保存到另一個二維數組中Java

public char[][] botLook3(){ 
    char[][] show = new char[5][5]; 
    int i = 0; 
    int j = 0; 
    for (int x = posX-2; i<posX+3; x++){ 
     for (int y = posY-2; y<posY+3; y++){ 
      if (i>=0 && i<rows && j>=0 && j<cols){ 
       System.out.println(i); 
       System.out.println(j); 
       if(Math.abs(posX-i)+Math.abs(posY-j)<4){ 
        show[x][y] = myWorld[i][j]; 
       }else{ 
        show[x][y] = 'X'; 
       } 
      }else{ 
       show[x][y] = '?'; 
      } 
     i++; 
     } 
    j++; 
    } 
    return show; 
} 

這是我收到的錯誤信息;

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12 
at GameLogic.botLook2(GameLogic.java:67) 
at PlayGame.main(PlayGame.java:32) 

謝謝,Ciaran。

+0

是什麼POSX&波西? – Kick

+0

機器人在二維數組中的當前位置。 – user202051

+0

posX和posY initail具有什麼價值? – Kick

回答

0

由於i和j都是相對於posX和posY設置的,如果posX或posY大於5,那麼在循環中的某個位置,您將引用數組中的索引大於5,因此會出現綁定

+0

我已經改變了代碼,但我仍然得到相同的錯誤。編輯問題中的代碼以顯示我已更改的內容。 – user202051

+0

你的代碼仍然依賴posX和posY。以此爲例:posX = 0和posY = 0。在這種情況下,在第一次迭代期間,您將通過if語句並嘗試訪問show [-2] [ - 2],顯然這是不允許的,出界外。 –

0

發生異常是因爲循環中的索引值i或j超出了兩個二維數組show和myworld中的至少一個的大小。 請在循環中檢查i & j的值。

System.out.println(i); 
System.out.println(j); 
0
public char[][] botLook(){ 
    char[][] show = new char[][]{ 
     new char[]{ '?','?','?','?','?'}, 
     new char[]{ '?','?','?','?','?'}, 
     new char[]{ '?','?','?','?','?'}, 
     new char[]{ '?','?','?','?','?'}, 
     new char[]{ '?','?','?','?','?'} 
    }; 
    for (int i = Math.max(2 - posX, 0); i< Math.min((cols + 2) - posX, 5); i++){ 
     for (int j = Math.max(2 - posY, 0); i< Math.min((rows + 2) - posY, 5); i++){ 
      if(Math.abs(i - 2) + Math.abs(j - 2) < 4){ 
       show[i][j] = myWorld[posX - 2 + i][ posY - 2 + j]; 
      }else{ 
       show[i][j] = 'X'; 
      } 
     } 
    } 
    return show; 
} 
相關問題