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
Barbara Streisandoriginal
2024-12-21 11:37:17806parcourir

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

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();
    }
}

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!

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