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()を呼び出すたびに、新しいイテレータを作成します。

開始時に1つのイテレータを作成し、それを繰り返し使用します。

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(); } 
} 
関連する問題