我对Java很新,所以如果这对你来说有点太愚蠢我很抱歉。所以,我有一个名为 Construct 的类,它有一个实例变量 previousState 。我在该类中有一个setter,其签名为 setPreviousState 。
然后,在另一个类中,我使用以下代码设置 Construct 对象的先前状态:
ArrayList<Construct> sequence = new ArrayList<Construct>();
do {
Construct minimum = priorityQueue.delMin();
for (Construct neighbor : minimum.neighbors()) {
neighbor.setPreviousState(minimum);
priorityQueue.insert(neighbor);
}
System.out.println(minimum);
if (minimum.isGoalState()) {
// Construct sequence backwards and return it
sequence.add(minimum);
while(minimum.previousState() != null) {
sequence.add(0, minimum.previousState());
}
return sequence;
}
} while (true);
但是while(minimum.previousState() != null)
是一个无限循环,因为previousState()
总是引用同一个对象。为什么呢?
答案 0 :(得分:2)
你永远不会在这个循环中更改minimum
的值,似乎每个对象minimum.previousState()
的值也是常量[没有一方影响方法previousState()
],你可能希望将minimum = minimum.previousState();
添加到您的while
循环中:
while(minimum.previousState() != null) {
sequence.add(0, minimum.previousState());
minimum = minimum.previousState();
}
答案 1 :(得分:1)
仅仅因为你永远不会改变循环中最小变量指向的内容。因此,您一次又一次地检查相同的最小值的previousState不为空,而不更改最小值和最小值的previousState。