0

こんにちは、Java で 2 次元の int 配列を使用するプログラムを書いています。2 つの異なる数値で配列を作成しようとすると、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 に設定すると、コードは問題なく実行されますが、2 つの異なる値 (たとえば 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[ currRow ][ currCol ] ではなく tileMap[ currCol ][ currRow ])、行 == 列を除くすべてのケースでそのような例外が発生します (同様に、存在しない列または行を見つけようとすることはありません)

于 2012-05-16T05:08:23.240 に答える