J'essaie de parcourir une liste de clés à partir d'une table de hachage à l'aide de l'énumération, mais je continue à recevoir une exception NoSuchElementException à la dernière clé de la liste?
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();
}
Sortie de la console:
EMAIL CODE POSTAL
Exception dans le fil "principal" Java.util.NoSuchElementException: Hashtable Enumerator À Java.util.Hashtable $ Enumerator.nextElement (Source inconnue) À testscripts.webdrivertest.main ( webdrivertest.Java:47)
Vous appelez nextElement()
deux fois dans votre boucle. Cet appel fait avancer le pointeur d’énumération. Vous devriez modifier votre code comme suit:
while (e.hasMoreElements()) {
String param = e.nextElement();
System.out.println(param);
}
for (String key : Collections.list(e))
System.out.println(key);
Chaque fois que vous appelez e.nextElement()
, vous prenez le prochain objet de l'itérateur. Vous devez vérifier e.hasMoreElement()
entre chaque appel.
Exemple:
while(e.hasMoreElements()){
String param = e.nextElement();
System.out.println(param);
}
Vous appelez nextElement deux fois. Refactor comme ceci:
while(e.hasMoreElements()){
String param = (String) e.nextElement();
System.out.println(param);
}
Vous appelez e.nextElement()
deux fois dans votre boucle lorsque vous êtes seulement assuré de pouvoir l'appeler une fois sans exception. Réécrivez la boucle comme suit:
while(e.hasMoreElements()){
String param = e.nextElement();
System.out.println(param);
}
Vous appelez nextElement deux fois dans la boucle. Vous ne devriez l'appeler qu'une fois, sinon il avance deux fois:
while(e.hasMoreElements()){
String s = e.nextElement();
System.out.println(s);
}
Chaque fois que vous faites e.nextElement()
vous en sautez un. Donc, vous sautez deux éléments à chaque itération de votre boucle.