Ссылка на Java - PullRequest
       11

Ссылка на Java

0 голосов
/ 06 ноября 2011

Я очень новичок в Java, поэтому извините, если это слишком глупо для вас. Итак, у меня есть класс с именем Construct , который имеет переменную экземпляра previousState . У меня есть сеттер в этом классе, с подписью 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 ]

2 голосов
/ 06 ноября 2011

Вы никогда не измените значение minimum в этом цикле, и кажется, что значение minimum.previousState() также является постоянным для каждого объекта [никакая сторона не влияет на метод previousState()], вы можете добавить minimum = minimum.previousState(); к вашей while петле:

while(minimum.previousState() != null) {
   sequence.add(0, minimum.previousState());
   minimum = minimum.previousState();
}
1 голос
/ 06 ноября 2011

Просто потому, что вы никогда не измените то, на что указывает минимальная переменная в цикле. Таким образом, вы снова и снова проверяете, что предыдущий уровень того же минимума не равен нулю, не изменяя ни минимальное значение, ни предыдущий уровень минимума.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...