迭代通过枚举hastable键抛出NoSuchElementException错误
我试图迭代通过使用枚举散列表中的键列表,但是我不断得到一个NoSuchElementException列表中的最后一个键?
Hashtable<String, String> vars = new Hashtable<String, String>(); vars.put("POSTCODE","TU1 3ZU"); vars.put("EMAIL","job.blogs@lumesse.com"); vars.put("DOB","02 Mar 1983"); Enumeration<String> e = vars.keys(); while(e.hasMoreElements()){ System.out.println(e.nextElement()); String param = (String) e.nextElement(); }
控制台输出:
电子邮件 邮编
线程“main”中的exceptionjava.util.NoSuchElementException:Hashtable枚举器 在java.util.Hashtable $ Enumerator.nextElement(Unknown Source) 在testscripts.webdrivertest.main(webdrivertest.java:47)
在循环中调用nextElement()
两次。 这个调用向前移动枚举指针。 你应该修改你的代码,如下所示:
while (e.hasMoreElements()) { String param = e.nextElement(); System.out.println(param); }
for (String key : Collections.list(e)) System.out.println(key);
每次调用e.nextElement()
,都会从迭代器中获取下一个对象。 您必须在每个调用之间检查e.hasMoreElement()
。
例:
while(e.hasMoreElements()){ String param = e.nextElement(); System.out.println(param); }
你正在调用nextElement两次。 像这样重构:
while(e.hasMoreElements()){ String param = (String) e.nextElement(); System.out.println(param); }
你只要在你的循环中调用e.nextElement()
两次,只保证你可以调用一次而没有exception。 像这样重写循环:
while(e.hasMoreElements()){ String param = e.nextElement(); System.out.println(param); }
你在循环中调用nextElement两次。 你应该只调用一次,否则它会前进两次:
while(e.hasMoreElements()){ String s = e.nextElement(); System.out.println(s); }
每次你做e.nextElement()
你跳过一个。 所以你跳过循环的每个迭代中的两个元素。