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 № 1System.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