0

現在、迷路のグリッドを表す2D配列を作成しました。私の迷路コンストラクターは次のとおりです。

public Maze(int rows, int columns)
{
    this.rows = rows;
    this.cols = columns;
    curr = new Square[rows][columns];
}

私のテストクラスでは次のようになります。

Maze m = new Maze(4, 4);

ただし、迷路を移動しているときに、デバッグ中に、currが列の引数なしでSquare[4][]に初期化されていることに気付きました。誰かがここで問題が何であるかについて何か考えを持っていますか?

編集:それは私がやろうとしていることです。curr = Square [rows] [columns]にしますが、次のループでcurrの値を確認すると、デバッガーツールではcurr[i][jにステップインするたびにcurrの値がSquare[4][]になります。 ]ループ内。

    for(int i = 0; i < maze.length; i++)
    {
        for(int j = 0; j < maze[i].length; j++)
        {
            /* Entrance */
            if(maze[i][j] == start)
            {
                startX = j;
                startY = i;
                curr[i][j] = new Square(i, j, start, this);
            }
            /* Exit */
            else if(maze[i][j] == end)
            {
                endX = j;
                endY = i;
                curr[i][j] = new Square(i, j, end, this);
            }
            /* Traversable Squares */
            else if(maze[i][j] == traverse)
            {
                curr[i][j] = new Square(i, j, traverse, this);
            }
            /* Non-traversable Squares */
            else
            {
                curr[i][j] = new Square(i, j, noTraverse, this);
            }
        }
    }
4

2 に答える 2

1

ここに画像の説明を入力してください

これはあなたが見ているものですか?この場合、デバッガーはcurrがSquare配列の配列であることのみを認識し、サブ配列に含まれる要素の数は認識しません。 new Square[4][4]は、内部配列を自動的に作成するショートカットです。それを行う別の方法は次のとおりです。

Square[][] curr = new Square[4][];

for (int ctrOut = 0; ctrOut < 4; ctrOut++) {
    curr[ctrOut] = new Square[5];

    for (int ctrIn = 0; ctrIn < 5; ctrIn++) {
        curr[ctrOut][ctrIn] = new Square();
    }
}

したがって、デバッガーが指示していることは正しいように見えます。(注:わかりやすくするために、4x4ではなく4x5を使用しました。)

于 2012-09-10T22:26:22.923 に答える
1

Java は、多次元配列に「不規則配列」を使用します。つまり、長方形配列 (すべての行の長さが同じ) を指定した場合でも、Java では、行の長さが異なる可能性が許容されます。

その結果、curr = new Square[r][c] は r+1 個のオブジェクトを作成します。

1 array with length r, where each element is an array of Squares (Square[])

r arrays of Squares, each of length c (although c could be changed for any of them)

したがってcurr、実際には aSquare[r][]です。これは、可変長の正方配列の r 要素の配列であり、それぞれの長さがたまたま c 要素です。

curr[n]である必要がありますSquare[]curr[n][m]Square

于 2012-09-10T22:07:26.240 に答える