引用数组中的位置而不是其中的数据。 (JAVA)

时间:2016-11-21 04:38:18

标签: java arrays algorithm pointers reference

我正在编写一个项目,要求我在由Unit s组成的网格状结构上使用图遍历算法。我正在创建网格,以便网格的每个单元都引用其每个邻居:

class Unit {
    boolean type, visited;
    Unit up, left, down, right;
    Unit(Unit u, Unit l, Unit d, Unit r) {
        up = u;
        left = l;
        down = d;
        right = r;
    }
}

我通过向每个位置添加一个新的Unit对象来创建一个Unit的网格,其中邻居的形式是对网格中其他位置的引用:

Unit[][] grid = new Unit[height][width];

for (int i = 0; i < height; ++i) {
    for (int j = 0; j < width; ++j) {
        grid[i][j] = new Unit(
            i == 0 ? null : grid[i - 1][j],
            j == 0 ? null : grid[i][j - 1],
            i == height - 1 ? null : grid[i + 1][j],
            j == width  - 1 ? null : grid[i][j + 1]
        );
    }
}

不幸的是,每当创建一些网格Unit时,它们的邻居都是null,因此它们不能保存正确的引用。为了解决这个问题,我只需重新运行整个算法,以便填充每个网格元素,但这似乎是一个非常低效和丑陋的解决方案。

我想要做的是将Unit对象保存为网格的“动态”索引,这样如果某个位置得到更新,那么适当的Unit s中的邻居引用也会得到更新。这是网格的一种承诺,即如果位置(i, j)被填充,则相邻的Unit将具有更新的信息。

感谢能帮助我解决此问题的任何人!

P.S。我意识到我可以将索引存储在邻居的Unit类中的网格中,但是这会限制我到这个示例中的特定网格,这将使得必须进行调用以获取项目每次更新。我可能不想像在这里那样将它存储在二维数组中,所以我想要一个可推广的系统。

1 个答案:

答案 0 :(得分:1)

当您使用构造函数创建第一个Unit时,没有相邻的单位,因此您的引用将引用null。您可以改为检查相邻单元格是否包含空引用(注意相邻单元格i和j值),如果是,则创建new Unit()