Utilisation de Scanner.nextLine() pour la saisie de l'utilisateur
Question :
Pourquoi le La méthode scanner.nextLine() se comporte différemment dans les deux codes Java suivants exemples ?
// Working Example Scanner scanner = new Scanner(System.in); System.out.print("Enter a sentence: "); String sentence = scanner.nextLine();
// Not Working Example while (true) { System.out.print("Enter a sentence: "); int selection = scanner.nextInt(); String sentence = scanner.nextLine(); }
Réponse :
La différence de comportement provient de la façon dont scanner.nextInt() consomme les entrées par rapport à scanner.nextLine().
Dans l'exemple fonctionnel, scanner.nextLine() lit une ligne entière d'entrée, y compris les espaces, jusqu'à ce qu'elle rencontre une nouvelle ligne personnage. En revanche, scanner.nextInt() lit uniquement la partie entière de l'entrée, laissant tous les caractères restants dans le tampon d'entrée.
Lorsque l'appel nextInt() est utilisé sans aucun appel ultérieur à nextLine(), tout les caractères restant dans le tampon d'entrée (par exemple, un caractère de nouvelle ligne) ne sont pas consommés, ce qui peut entraîner des problèmes pour les appels nextLine() ultérieurs.
Dans l'exemple non fonctionnel, une fois que l'utilisateur a entré un nombre, le caractère de nouvelle ligne restant n'est pas consommé par nextInt(). Par conséquent, l'appel suivant à nextLine() lit immédiatement le caractère de nouvelle ligne, ce qui entraîne l'attribution d'une chaîne vide à la phrase.
Pour résoudre ce problème, un appel supplémentaire à scanner.nextLine() peut être placé après chaque Appel nextInt() pour consommer tous les caractères restants dans le tampon d’entrée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!