【问题标题】:Infinite loop because the iterator doesn't move无限循环,因为迭代器不移动
【发布时间】:2016-07-21 15:14:40
【问题描述】:

有一个类实现了接口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() 方法,但迭代器并没有移动。

【问题讨论】:

    标签: java loops iterator


    【解决方案1】:

    每次调用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(); }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2017-05-02
      • 2021-07-10
      • 2014-10-31
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多