Java 2D阵列问题

时间:2012-05-16 05:01:24

标签: java multidimensional-array indexoutofboundsexception

您好我正在编写一个在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),它就会抛出一个错误。

如果我没有解释清楚,或者你需要更多代码来理解这个问题,请告诉我

2 个答案:

答案 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>

如果你的数组索引是错误的(t​​ileMap [ currCol ] [ currRow ]而不是tileMap [currRow] [currCol])那么你会得到的在每种情况下都有这样的例外,除了行==列(因为如果它们是相同的,你将永远不会尝试找到不退出的列或行)