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]创建一个正方形对象数组,其尺寸是逐行逐列的。是的,这正是它向我展示的。我认为这可能是一个错误,但现在已经解释清楚了,这对我来说是有意义的。谢谢大家!