Java参考问题

Java参考问题,java,reference,Java,Reference,我对Java非常陌生,如果这对你来说有点太愚蠢,我很抱歉。因此,我有一个名为Construct的类,它有一个实例变量previousState。我在那个类中有一个setter,签名为setPreviousState 然后,在另一个类中,我使用以下代码设置构造对象的先前状态: ArrayList<Construct> sequence = new ArrayList<Construct>(); do { Construct minimum =

我对Java非常陌生,如果这对你来说有点太愚蠢,我很抱歉。因此,我有一个名为Construct的类,它有一个实例变量previousState。我在那个类中有一个setter,签名为setPreviousState

然后,在另一个类中,我使用以下代码设置构造对象的先前状态:

    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。

非常感谢您的回答,我不知道我怎么没有看到。非常感谢您的回答,我不知道我怎么没有看到。