2012-05-16 212 views
0

嗨,我正在寫一個程序,它在Java中使用2維int數組。每當我嘗試創建具有兩個不同數字的數組時,它都會拋出ArrayIndex超出範圍。Java二維數組問題

這樣的一個例子將是...

private int[][] tileMap; 


public EditWindow(int rows, int columns, int tileSize){ 

    this.columns = columns; 
    this.rows = rows; 
    this.tileSize = tileSize; 

    addMouseListener(this); 

    tileMap = new int[rows][columns]; 

} 

如果設置了行和列是10,例如,代碼完美運行但只要我將其設定爲兩個不同的值(例如10和20),它會拋出一個錯誤。

如果有件事我沒有解釋,或您需要更多的代碼來理解這個問題讓我知道

+0

似乎還有其他代碼會引發錯誤 - 可能是嵌套循環遍歷數組? –

+0

向我們展示它爆炸的代碼行 – Bohemian

回答

0

你在這裏發佈的代碼很好。 ArrayIndexOutOfBoundsException通常在您的數組訪問時不會創建它,而您正在訪問。我猜你的代碼中有一個嵌套的for循環。例如:

for (int currRow=0; currRow<this.rows; currRow++) 
{ 
    for (int currCol=0; currCol<this.columns; currCol++) 
    { 
     do something(tileMap[currRow][currCol]); 
    } 

} 

這就是您需要查看的代碼。確保你有'currRow'和'currCol'圍繞正確的方式,並且你在每個地方使用正確的。

如果你周圍的錯誤的方式您的數組索引(tilemap的[currCol] [currRow]代替tilemap的[currRow] [currCol]),那麼你將得到的只是這樣,除非行的在每一種情況下例外==列(因爲如果它們是相同的,你將永遠不會嘗試找到一列或不能退出的行)

+0

非常感謝!我不敢相信我以前沒有看到這個 – user1326240

0

我的猜測是,你正在聲明數組爲int[rows][columns],但遍歷它與行/列值調換,如:

for (int row = 0; row < rows; row++) 
    for (int col = 0; col < columns; col++) 
     int tile = tileMap[col][row]; // oops - row/col transposed 

這種情況(或類似)可以解釋爲什麼有相同的價值觀不爆炸,但不同的價值觀也發生爆炸。