我对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/

10-12 04:57