Iterator迭代器导致的java.util.NoSuchElementException原因与解决方法

xiaoxiao2021-02-27  158

我:今天使用迭代器出现了java.util.NoSuchElementException错误,搜索到了解决办法。还是对迭代器next()没有深入了解。以下:

本文尊重原创

http://blog.csdn.net/a503921892/article/details/23061341

简单的说:

原因:循环中不能用两次(含)的next()方法。

解决方法:将next()取出的数据先传给一个新的对象,用的时候再想方法取出来。

我们可以在JDK文档中看到 Iterator 的三个方法(如下表),Java.util.NoSuchElementException是由next()导致的!见下面红字

方法摘要booleanhasNext() 如果仍有元素可以迭代,则返回 true。Enext() 返回迭代的下一个元素。voidremove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

next

E next() 返回迭代的下一个元素。 返回: 迭代的下一个元素。 抛出:

NoSuchElementException - 没有元素可以迭代。      ←就是这里

异常代码如下:

[java]  view plain  copy //用迭代器遍历hashMap,并方符合条件时返回值,常识:迭代器初始位置指在在列表第一个数据的上面,而不是指在第一个数据!重点是next()方法不能在循环中调用两次,否则会报java.util.NoSuchElementException   boolean isOk = false;   Iterator<Map.Entry<String, String>>  iter = map.entrySet().iterator();   while(iter.hasNext()){ //hashNext()              <span style="white-space:pre">  </span>if(name.equals(iter.next().getKey())){//next()一次                              System.out.println("姓名:" + iter.next().getKey();//两次           System.out.println("电话:" + iter.next().getValue();//三次           isOk = true;           break;       }   }       if(isOk) {           //nothing          }       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;">//next() 仅此一次,创建了一个新对象,并将next()取出的值传给它</span>          String outname = index.getKey();//再将值取出       String outnumber = index.getValue();<span style="font-family: Arial, Helvetica, sans-serif;">//再将值取出</span>                         if(name.equals(outname)){//这里也不用next()方法了           System.out.println("姓名:" + outname);           System.out.println("电话:" + outnumber);           isOk = true;           break;       }   }   <span style="white-space:pre">  </span>if(isOk) {               //nothing       }   <span style="white-space:pre">  </span>else{       <span style="white-space:pre">  </span>System.out.println("查无此人!");       }  
转载请注明原文地址: https://www.6miu.com/read-16264.html

最新回复(0)