Я пытаюсь сделать цикл по каждому элементу, как следует для LinkedList-эск класса, который я построил:реализация Итератор вызывает бесконечный цикл
boolean contains = false;
for(Thing t : front) {
if(t.equals(something)) {
t.doSomething();
contains = true;
break;
}
}
Это те методы, итераторы я реализовал:
@Override
public Iterator<Thing> iterator() {
Thing current = this;
return new Iterator<Thing>() {
public boolean hasNext() {
return current.hasNext();
}
public Thing next() {
return current.next;
}
};
}
Я пробовал отлаживать это, и кажется, что он не возвращает следующий элемент в связанном списке, тем самым вызывая бесконечный цикл, когда я запускаю его и пытаюсь выполнить цикл foreach.
Извините, если на этот вопрос был дан ответ или есть действительно глупая ошибка, я искал какое-то время и не смог найти ответ. Это мой первый раз, написав итератор, поэтому, пожалуйста, будьте осторожны. :)
Когда я это делаю, я получаю сообщение об ошибке в Eclipse: «Локальный переменный ток, определенный в закрывающей области, должен быть окончательным или эффективно окончательным». Я попытался изменить следующий метод на следующий: public Thing next() { \t Thing tmp = current; \t tmp = current.next; \t return tmp; } Но он все еще не переходит к следующему элементу в списке. – Tbs95
@ Tbs95 Анонимный класс в методе не имеет прав на внесение изменений в переменные внутри метода размещения. Вам нужно сделать переменную 'current' переменной экземпляра' Iterator', потому что она является частью состояния итератора. – khelwood
Спасибо @Eran, но теперь, когда я изменил местоположение объявления переменных, я получаю ошибку типа Mismatch, конвертирующую новый Iterator() {} в Thing. –
Tbs95