iterating through Enumeration of hastable keys throws NoSuchElementException error

152,626

Solution 1

You call nextElement() twice in your loop. This call moves the enumeration pointer forward. You should modify your code like the following:

while (e.hasMoreElements()) {
    String param = e.nextElement();
    System.out.println(param);
}

Solution 2

for (String key : Collections.list(e))
    System.out.println(key);

Solution 3

Every time you call e.nextElement() you take the next object from the iterator. You have to check e.hasMoreElement() between each call.


Example:

while(e.hasMoreElements()){
    String param = e.nextElement();
    System.out.println(param);
}

Solution 4

You are calling nextElement twice. Refactor like this:

while(e.hasMoreElements()){


String param = (String) e.nextElement();
System.out.println(param);
}

Solution 5

You're calling e.nextElement() twice inside your loop when you're only guaranteed that you can call it once without an exception. Rewrite the loop like so:

while(e.hasMoreElements()){
  String param = e.nextElement();
  System.out.println(param);
}
Share:
152,626
David Cunningham
Author by

David Cunningham

Updated on July 05, 2022

Comments

  • David Cunningham
    David Cunningham almost 2 years

    I am trying to iterate through a list of keys from a hash table using enumeration however I keep getting a NoSuchElementException at the last key in list?

    Hashtable<String, String> vars = new Hashtable<String, String>();
    
    vars.put("POSTCODE","TU1 3ZU");
    vars.put("EMAIL","[email protected]");
    vars.put("DOB","02 Mar 1983");
    
    Enumeration<String> e = vars.keys();
    
    while(e.hasMoreElements()){
    
    System.out.println(e.nextElement());
    String param = (String) e.nextElement();
    }
    

    Console output:

    EMAIL
    POSTCODE
    
    Exception in thread "main" java.util.NoSuchElementException: Hashtable Enumerator
        at java.util.Hashtable$Enumerator.nextElement(Unknown Source)
        at testscripts.webdrivertest.main(webdrivertest.java:47)