繁体   English   中英

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

[英]Referencing a Location in an Array rather than the Data within it. (Java)

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

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的邻居引用也将被更新。 网格表示这是一种承诺,即如果位置(i, j)被填充,则相邻Unit将会拥有更新的信息。


谢谢任何可以帮助我解决这个问题的人!

PS我意识到我可以将索引存储到邻居的Unit类中的网格中,但这将限制我在此示例中拥有的特定网格,因此有必要每次调用都获得该项更新。 我可能不想像在这里一样将其存储在二维数组中,所以我想要一个可通用的系统。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM