66 votes

l'itération à travers l'énumération des clés hastable lève l'erreur NoSuchElementException

J'essaie de parcourir une liste de clés à partir d'une table de hachage à l'aide d'une énumération, mais je continue à obtenir 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","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();
}

Sortie console :

 E-MAIL
 CODE POSTAL
 Exception dans le thread "main" java.util.NoSuchElementException : énumérateur de table de hachage
 à java.util.Hashtable$Enumerator.nextElement (source inconnue)
 à testscripts.webdrivertest.main(webdrivertest.java:47)

119voto

AlexR Points 60796

Vous appelez nextElement() deux fois dans votre boucle. Cet appel déplace le pointeur d'énumération vers l'avant. Vous devez modifier votre code comme suit :

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

75voto

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

10voto

dacwe Points 26160

Chaque fois que vous appelez e.nextElement() vous prenez l'objet suivant 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);
}

4voto

Heisenbug Points 20496

Vous appelez nextElement deux fois. Refactorisez comme ceci :

 while(e.hasMoreElements()){


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

3voto

scompt.com Points 11304

Vous appelez e.nextElement() deux fois dans votre boucle alors que vous n'êtes assuré de pouvoir l'appeler qu'une seule fois sans exception. Réécrivez la boucle comme ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X