Java参考问题
我对Java非常陌生,如果这对你来说有点太愚蠢,我很抱歉。因此,我有一个名为Construct的类,它有一个实例变量previousState。我在那个类中有一个setter,签名为setPreviousState 然后,在另一个类中,我使用以下代码设置构造对象的先前状态:Java参考问题,java,reference,Java,Reference,我对Java非常陌生,如果这对你来说有点太愚蠢,我很抱歉。因此,我有一个名为Construct的类,它有一个实例变量previousState。我在那个类中有一个setter,签名为setPreviousState 然后,在另一个类中,我使用以下代码设置构造对象的先前状态: ArrayList<Construct> sequence = new ArrayList<Construct>(); do { Construct minimum =
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);
ArrayList序列=新的ArrayList();
做{
构造minimum=priorityQueue.delMin();
for(构造邻居:minimum.neights()){
邻居.setPreviousState(最小值);
priorityQueue.insert(邻居);
}
系统输出打印项次(最小值);
if(最小值.isGoalState()){
//向后构造序列并返回它
顺序。添加(最小值);
while(最小值.previousState()!=null){
sequence.add(0,最小值.previousState());
}
返回序列;
}
}虽然(正确);
但是
while(minimum.previousState()!=null)
是一个无限循环,因为previousState()
总是引用同一个对象。为什么?您从未更改此循环中最小值的值,而且最小值.previousState()
的值对于每个对象也是常量[对方法previousState()
]没有副作用,您可能需要添加最小值=最小值.previousState()编码>到您的,而循环:
while(minimum.previousState() != null) {
sequence.add(0, minimum.previousState());
minimum = minimum.previousState();
}
在这个循环中,您永远不会更改minimum
的值,而且似乎minimum.previousState()
的值对于每个对象也是常量[对方法previousState()
]没有副作用,您可能需要添加minimum=minimum.previousState()编码>到您的,而循环:
while(minimum.previousState() != null) {
sequence.add(0, minimum.previousState());
minimum = minimum.previousState();
}
只是因为你永远不会改变最小变量在循环中指向什么。因此,您反复检查同一个最小值的previousState是否不为null,而不会更改最小值或最小值的previousState。只是因为您从未更改最小变量在循环中指向的内容。因此,您正在反复检查同一个最小值的previousState是否不为null,而不会更改最小值或最小值的previousState。非常感谢您的回答,我不知道我怎么没有看到。非常感谢您的回答,我不知道我怎么没有看到。