目前我创建了一个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的值为Square [4] [],无论何时它进入curr [i] [j ]在循环中。
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);
}
}
}
答案 0 :(得分: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
实际上是Square[r][]
:它是一个可变长度的方阵的r元素数组,每个数组恰好都是c个元素。
curr[n]
应为Square[]
,而curr[n][m]
为Square
答案 1 :(得分: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();
}
}
那么调试器告诉你的内容似乎是正确的。 (注意,为了清晰起见,我使用了4x5而不是4x4。)