java - 为什么在使用 listIterator.add() 时出现 noSuchElementException?

标签 java iterator addition nosuchelementexception

不再拖延,我将立即发布我的代码。它非常简单,所以理解它应该不会有任何问题。我的想法是使用 listIterator 找到 "blue"添加 颜色。显然这里有问题。

public class Main {
    public static void main(String[] args) {
        Color c1 = new Color("red");
        Color c2 = new Color("blue");
        Color c3 = new Color("green");

        List<Color> list = new ArrayList<>();
        list.add(c1);
        list.add(c2);
        list.add(c3);

        ListIterator<Color> iterator = list.listIterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
            if (iterator.next().tone.equals("blue")){
                iterator.add(new Color("yellow"));
            }
        }

    }
}

class Color {
    String tone;

    public Color(String tone) {
        this.tone = tone;
    }

    @Override
    public String toString() {
        return tone;
    }
}

输出:

red
green
Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.ArrayList$Itr.next(ArrayList.java:999)
    at Main.main(Main.java:21)

最佳答案

您调用 hasNext() 一次,即可调用 next() 两次。调用一次,保存即可多次使用

while (iterator.hasNext()){
     Color current = iterator.next();
     System.out.println(current);
     if (current.tone.equals("blue")){
         iterator.add(new Color("yellow"));
     }
}

关于java - 为什么在使用 listIterator.add() 时出现 noSuchElementException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64092798/

相关文章:

java - 父类(super class)的字段 : private+accessors vs protected

java - 在 Eclipse 中,我有一个包含许多条目的列表或映射 - 有没有办法搜索特定值?

c++ - Iterator increment results 是一个新的迭代器吗?

recursion - Lisp 中的递归加法

java - java zoneinfo有什么问题?

java - 从 Spring MVC Controller 的安全上下文中获取 UserDetails 对象

c++ - 为什么 vector::iterator 在重新分配时无效?

java - 由 : java. util.NoSuchElementException 引起 - 在 Java 中使用迭代器?

javascript - 使用循环生成表行时自动将行和列数据添加在一起

java - 博德马斯, java 。简单的数学不会相加