为什么在使用 listIterator.add() 时出现 noSuchElementException?
Why do I get noSuchElementException when using listIterator.add()?
事不宜迟,我会立即 post 我的代码。它非常简单,因此您在理解它时应该不会有任何问题。我的想法是 add
color 在使用 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()
一次,调用 2 次 next()
。调用一次保存即可多次使用
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)
}
所以基本上 iterator.next()
定位可迭代集合中的元素。
因此在你的 while
循环中多次调用 iterator.next()
会将光标移动到下一个值,因此最好将 iterator.next()
存储到循环内的变量中。
事不宜迟,我会立即 post 我的代码。它非常简单,因此您在理解它时应该不会有任何问题。我的想法是 add
color 在使用 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()
一次,调用 2 次 next()
。调用一次保存即可多次使用
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)
}
所以基本上 iterator.next()
定位可迭代集合中的元素。
因此在你的 while
循环中多次调用 iterator.next()
会将光标移动到下一个值,因此最好将 iterator.next()
存储到循环内的变量中。