Java 二维数组初始化错误

Java 二维数组初始化错误,java,initialization,multidimensional-array,Java,Initialization,Multidimensional Array,目前,我创建了一个二维数组来表示迷宫的网格。我的迷宫构造器如下: 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][],没有列的参数。有人知

目前,我创建了一个二维数组来表示迷宫的网格。我的迷宫构造器如下:

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在循环中进入curr[I][j]时具有值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);
            }
        }
    }
for(int i=0;i
Java使用“不规则数组”作为多维数组。换句话说,即使您指定一个矩形数组(其中所有行的长度相同),java也允许行的长度可能不同

因此,curr=new Square[r][c]将创建r+1对象:

1个长度为r的数组,其中每个元素是一个正方形数组(正方形[])


r个正方形数组,每个数组的长度为c(尽管其中任何一个都可以更改c)

因此,
curr
实际上是一个
Square[r][
:它是一个由可变长度的方形数组组成的r元素数组,每个数组的长度恰好是c元素

curr[n]
应该是一个
Square[]
,而
curr[n][m]
是一个
Square

这就是你看到的吗?在这种情况下,调试器只知道curr是一个正方形数组的数组,而不知道子数组中有多少个元素
newsquare[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();
    }
}
Square[]curr=新的Square[4][];
对于(int ctrOut=0;ctrOut<4;ctrOut++){
当前[ctrOut]=新广场[5];
对于(int-ctrIn=0;ctrIn<5;ctrIn++){
curr[ctrOut][ctrIn]=新正方形();
}
}

因此,调试器告诉您的似乎是正确的。(注意,为了清晰起见,我使用了4x5,而不是4x4。)

我将使用调试器在这里单步执行,以查看在分配curr时列的值。你怎么知道它被初始化为正方形[4][]呢?当我使用我的调试器一步一步地通过我的迷宫时,curr总是正方形[4][]正方形[4][]是什么意思?你的意思是类似于正方形[4][0]的东西吗?还有新的正方形[行][列];对我来说没有意义。。也许你的意思是int[][]square=newint[rows][columns]?new square[rows][columns]创建一个正方形对象数组,其尺寸是逐行逐列的。是的,这正是它向我展示的。我认为这可能是一个错误,但现在已经解释清楚了,这对我来说是有意义的。谢谢大家!