[英]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.