2016-07-21 3 views
1

Существует некоторый класс, который реализует интерфейс Selector. Я должен использовать iterator() в своих методах.Бесконечный цикл, потому что итератор не перемещается

private class SequenceSelector implements Selector { 
    private T obj = items.iterator().next(); 
    public boolean end() { return !items.iterator().hasNext(); } 
    public T current() { return obj; } 
    public void next() { obj = items.iterator().next(); } 
} 

items - ArrayList. obj - это значение, чтобы сохранить первый член последовательности до первого next() с использованием.

С помощью следующего кода программа переходит в бесконечный цикл, в котором напечатан только первый элемент последовательности.

while(!selector.end()) { 
     System.out.print(selector.current() + " "); 
     selector.next(); 
} 

Почему это происходит? Хотя я использую метод next(), итератор не перемещается.

ответ

6

Каждый раз, когда вы вызываете items.iterator(), вы создаете новый итератор.

Создайте один итератор в начале и используйте его повторно.

private class SequenceSelector implements Selector { 
    private final Iterator<T> iterator = items.iterator(); 

    private T obj = iterator.next(); 
    public boolean end() { return !iterator.hasNext(); } 
    public T current() { return obj; } 
    public void next() { obj = iterator.next(); } 
} 
Смежные вопросы