我对Java非常陌生,所以对您来说这太愚蠢了,我感到抱歉。因此,我有一个名为Construct的类,该类具有实例变量previousState。我在该类中有一个二传手,签名为setPreviousState。
然后,在另一个类中,使用以下代码设置Constructor对象的先前状态:
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()
始终引用同一对象。为什么? 最佳答案
您永远不会在此循环中更改minimum
的值,并且看来minimum.previousState()
的值对于每个对象也是恒定的[对方法previousState()
而言没有任何影响,您可能希望将minimum = minimum.previousState();
添加到您的while
循环:
while(minimum.previousState() != null) {
sequence.add(0, minimum.previousState());
minimum = minimum.previousState();
}
关于java - Java引用问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8026048/