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!