我:今天使用迭代器出现了java.util.NoSuchElementException错误,搜索到了解决办法。还是对迭代器next()没有深入了解。以下:
本文尊重原创
http://blog.csdn.net/a503921892/article/details/23061341
简单的说:
原因:循环中不能用两次(含)的next()方法。
解决方法:将next()取出的数据先传给一个新的对象,用的时候再想方法取出来。
我们可以在JDK文档中看到 Iterator 的三个方法(如下表),Java.util.NoSuchElementException是由next()导致的!见下面红字
方法摘要 |
boolean |
hasNext() 如果仍有元素可以迭代,则返回 true。 |
E |
next() 返回迭代的下一个元素。 |
void |
remove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。 |
next
E next()
-
返回迭代的下一个元素。
-
-
返回:
-
迭代的下一个元素。
-
抛出:
NoSuchElementException
- 没有元素可以迭代。 ←就是这里
异常代码如下:
[java] view plain copy
-
- boolean isOk = false;
- Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
- while(iter.hasNext()){
-
- <span style="white-space:pre"> </span>if(name.equals(iter.next().getKey())){
-
- System.out.println("姓名:" + iter.next().getKey();
- System.out.println("电话:" + iter.next().getValue();
- isOk = true;
- break;
- }
- }
- if(isOk) {
-
- }
- else{
- System.out.println("查无此人!");
- }
改进过后的代码如下:
[java] view plain copy
- boolean isOk = false;
- Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
-
- while(iter.hasNext()){
- <span style="white-space:pre"> </span>Map.Entry<String, String> index = iter.next();<span style="font-family: Arial, Helvetica, sans-serif;">
-
- String outname = index.getKey();
- String outnumber = index.getValue();<span style="font-family: Arial, Helvetica, sans-serif;">
-
-
- if(name.equals(outname)){
- System.out.println("姓名:" + outname);
- System.out.println("电话:" + outnumber);
- isOk = true;
- break;
- }
- }
- <span style="white-space:pre"> </span>if(isOk) {
-
- }
- <span style="white-space:pre"> </span>else{
- <span style="white-space:pre"> </span>System.out.println("查无此人!");
- }
-