Maison > Java > javaDidacticiel > Pourquoi `nextLine()` de Java se comporte-t-il de manière inattendue après `nextInt()` ?

Pourquoi `nextLine()` de Java se comporte-t-il de manière inattendue après `nextInt()` ?

Barbara Streisand
Libérer: 2024-12-21 11:37:17
original
692 Les gens l'ont consulté

Why Does Java's `nextLine()` Behave Unexpectedly After `nextInt()`?

Compréhension de nextLine()

Dans l'API java.util.Scanner de Java, la méthode nextLine() donne aux développeurs la possibilité d'analyser l'entrée de chaîne de l'utilisateur. Cependant, il peut se comporter différemment lorsqu'il est utilisé dans des boucles ou après d'autres méthodes d'analyse d'entrée comme nextInt().

Scénario n°1 :

Un extrait de code qui utilise nextLine( ) avec succès :

Scanner scanner = new Scanner(System.in);

// Wait for user input before continuing
String sentence = scanner.nextLine();

// Continue with more input
int index = scanner.nextInt();
Copier après la connexion

Dans ce scénario, nextLine() attend la saisie de l'utilisateur avant de passer à nextInt().

Scénario n°2 :

Considérons maintenant un extrait de code qui se comporte de manière inattendue :

Scanner scanner = new Scanner(System.in);

// Infinite loop
while (true) {
    // Menu options
    int selection = scanner.nextInt();

    // Input only works after reading the number
    if (selection == 1) {
        String sentence = scanner.nextLine();
        int index = scanner.nextInt();
    }
}
Copier après la connexion

Ici, nextLine() ne Je n'attends pas la saisie de l'utilisateur après nextInt(). Il passe à la ligne suivante, rendant impossible la saisie d'une phrase.

Explication :

La différence entre ces exemples réside dans la méthode nextInt(). Il lit les entrées numériques, mais ne consomme pas le caractère de nouvelle ligne (n) qui suit. Par conséquent, lorsque nextLine() est appelé après nextInt(), il essaie de lire le caractère de nouvelle ligne déjà consommé, ce qui entraîne le comportement inattendu du scénario n°2.

Solution :

Pour résoudre ce problème, insérez un appel nextLine() supplémentaire après chaque nextInt() pour consommer l'entrée restante sur la ligne avant de passer à la demande d'entrée suivante. Cela garantit que nextLine() attend toujours la saisie de l'utilisateur.

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