Maison > Java > javaDidacticiel > Pourquoi `scanner.nextLine()` se comporte-t-il différemment après `scanner.nextInt()` en Java ?

Pourquoi `scanner.nextLine()` se comporte-t-il différemment après `scanner.nextInt()` en Java ?

Mary-Kate Olsen
Libérer: 2024-12-27 07:21:09
original
885 Les gens l'ont consulté

Why Does `scanner.nextLine()` Behave Differently After `scanner.nextInt()` in Java?

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();
Copier après la connexion
// Not Working Example
while (true) {
    System.out.print("Enter a sentence: ");
    int selection = scanner.nextInt();
    String sentence = scanner.nextLine();
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal