0

嗨,我正在编写一个在 java 中使用二维 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),它就会引发错误。

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

4

2 回答 2

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

这种情况(或类似情况)可以解释为什么具有相同的值不会爆炸,但不同的值会爆炸。

于 2012-05-16T05:05:52.603 回答
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]),那么除了行 == 列(因为如果他们'相同,您永远不会尝试找到不退出的列或行)

于 2012-05-16T05:08:23.240 回答