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
Mary-Kate Olsenoriginal
2024-12-27 07:21:09947parcourir

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();
// 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!

Déclaration:
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