Java参考问题

时间:2011-11-06 09:05:06

标签: java reference

我对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()总是引用同一个对象。为什么呢?

2 个答案:

答案 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。