java - 二维数组初始化错误

标签 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][] ,没有列的参数。有谁知道这里可能出现什么问题吗?

编辑:这就是我打算做的;我使 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);
            }
        }
    }

最佳答案

Java 使用“不规则数组”来表示它的多维数组。换句话说,即使您指定一个矩形数组 - 所有行都具有相同长度的数组,java 也允许行具有不同长度的可能性。

结果,curr = new Square[r][c] 创建了 r+1 个对象:

1 个长度为 r 的数组,其中每个元素都是 Squares 数组 (Square[])

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

所以 curr 实际上是一个 Square[r][]:它是一个可变长度方阵的 r 元素数组,每个方阵恰好长度为 c 个元素。

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

关于java - 二维数组初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12358614/

相关文章:

java - Junit - AssertArrayEquals 不适用于用户定义的对象(非原始数据类型)

java - 在 Java Web 应用程序中获取 DataSource 资源

java - Java Swing 对象静态初始化的首选习惯用法?

java - Altbeacon - 扫描数组中的多个 UUID

java - 浏览器渲染和流式传输

ruby - 有没有办法通过散列来初始化对象?

c - 在 C 中抑制 'uninitialized variable warnings' 的不同方法

php - 通过键名仅从 JSON 获取特定键/值,而不是全部

javascript - jQuery 多维数组(动态键) - 无法设置未定义的属性

c - 当int具有十六进制时如何在C中将二维数组转换为一维数组