您好我正在编写一个在java中使用2维int数组的程序。每当我尝试使用两个不同的数字创建数组时,它会抛出一个超出范围的ArrayIndex。
这样的一个例子是......
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)
我的猜测是你将数组声明为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
这种情况(或类似的)可以解释为什么具有相同的值不会爆炸,但不同的值会爆炸。
答案 1 :(得分: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',并且你在每个地方使用正确的。{/ p>
如果你的数组索引是错误的(tileMap [ currCol ] [ currRow ]而不是tileMap [currRow] [currCol])那么你会得到的在每种情况下都有这样的例外,除了行==列(因为如果它们是相同的,你将永远不会尝试找到不退出的列或行)