Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在使用listIterator.add()时会得到NoTouchElementException?_Java_Iterator_Add_Nosuchelementexception - Fatal编程技术网

Java 为什么在使用listIterator.add()时会得到NoTouchElementException?

Java 为什么在使用listIterator.add()时会得到NoTouchElementException?,java,iterator,add,nosuchelementexception,Java,Iterator,Add,Nosuchelementexception,不再拖延,我将立即发布我的代码。它非常简单,所以你在理解它时不会发现任何问题。我的想法是使用列表迭代器在找到蓝色后添加颜色。显然这里有点不对劲 public class Main { public static void main(String[] args) { Color c1 = new Color("red"); Color c2 = new Color("blue"); Color c3 =

不再拖延,我将立即发布我的代码。它非常简单,所以你在理解它时不会发现任何问题。我的想法是使用
列表迭代器
在找到蓝色后添加
颜色。显然这里有点不对劲

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;
    }
}
对于
next()
的两次调用,您只需调用一次
hasNext()
。调用一次并保存它,以便能够多次使用

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

我知道答案已经提供了,但如果有帮助的话,请发布 请参阅以下代码:-

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();
    System.out.println(iterator.next());//-->red
    System.out.println(iterator.next());//-->blue
    System.out.println(iterator.next());//-->green
    System.out.println(iterator.next());//-->java.util.NoSuchElementException (iterator is moved forward but list is exhausted)
}
publicstaticvoidmain(字符串[]args){
颜色c1=新颜色(“红色”);
颜色c2=新颜色(“蓝色”);
颜色c3=新颜色(“绿色”);
列表=新的ArrayList();
增加(c1);
增加(c2);
增加(c3);
ListIterator迭代器=list.ListIterator();
System.out.println(iterator.next());//-->红色
System.out.println(iterator.next());//-->蓝色
System.out.println(iterator.next());//-->绿色
System.out.println(iterator.next());//-->java.util.NoSuchElementException(iterator向前移动,但列表已用尽)
}
因此基本上,
iterator.next()
在iterable集合中定位元素。
因此,在ur
中多次调用
iterator.next()
while
循环将每次光标移动到下一个值,因此最好将
iterator.next()
存储到循环中的变量中。

谢谢azro!您能帮我理解该异常的名称吗?因为
next()
技术上没有删除我的元素,它只是移动了光标。@Stefan“嗨,我想要下一个元素”,“对不起,我的实际迭代器中没有这样的元素”从我们现在的位置没有“next”元素,所有的元素都被消耗了,真的,我终于得到了:)尽管
。next()
在if循环中,它仍在调用
next()
。你是这么说的?所以最终在最后一次调用中将不会有更多的元素,我调用
next()
。对吗?@Stefan是的,if中的
.next()
会向前移动光标,每次调用next()都会向前移动光标,因此使用hasNext,您肯定可以执行1次移动,但实际上是执行2次移动
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();
    System.out.println(iterator.next());//-->red
    System.out.println(iterator.next());//-->blue
    System.out.println(iterator.next());//-->green
    System.out.println(iterator.next());//-->java.util.NoSuchElementException (iterator is moved forward but list is exhausted)
}