/ / scanner.hasNext () entraîne une boucle infinie - java, java.util.scanner, infinite-loop

scanner.hasNext () génère une boucle infinie - java, java.util.scanner, boucle infinie

J'ai un morceau de code qui doit lire l'entrée mot par mot et ajouter la longueur du mot à une liste de tableaux de manière récursive (pour un exercice scolaire).

J'ai écrit cette méthode:

ArrayList<Integer> wordLengths = new ArrayList<Integer>();
Scanner scanner = new Scanner(System.in);
// ...
private void readWords() {
// read a word, if there are more words, read the next word
this.wordLengths.add(this.scanner.next().length());

if (this.scanner.hasNext()) {
readWords();
}
}

Lorsque j'appelle cette méthode, elle ne cesse de demander de nouveaux mots. Cela n'arrêtera pas la boucle (récursive). Pourquoi cela se produit-il? this.scanner.hasNext() ne doit être vrai que lorsqu'il y a un mot suivant dans l'entrée, il doit donc s'arrêter lorsqu'il n'y a pas d'autre mot.

Réponses:

3 pour la réponse № 1

System.in est un flux d'entrée. Il n'est jamais fermé, donc il retournera toujours vrai pour #hasNext ()


0 pour la réponse № 2

Utilisation Ctrl+Z(+ Entrée) sous Windows ou Ctrl+D sous Unix pour envoyer EOF et terminer le flux d'entrée