843 votes

Le scanner saute nextLine() après avoir utilisé next() ou nextFoo() ?

J'utilise le Scanner méthodes nextInt() y nextLine() pour l'entrée en lecture.

Ça ressemble à ça :

System.out.println("Enter numerical value");    
int option;
option = input.nextInt(); // Read numerical value from input
System.out.println("Enter 1st string"); 
String string1 = input.nextLine(); // Read 1st string (this is skipped)
System.out.println("Enter 2nd string");
String string2 = input.nextLine(); // Read 2nd string (this appears right after reading numerical value)

Le problème est qu'après avoir saisi la valeur numérique, la première page de l'écran d'accueil de l'ordinateur est remplie. input.nextLine() est sautée et le deuxième input.nextLine() est exécuté, de sorte que ma sortie ressemble à ceci :

Enter numerical value
3   // This is my input
Enter 1st string    // The program is supposed to stop here and wait for my input, but is skipped
Enter 2nd string    // ...and this line is executed and waits for my input

J'ai testé mon application et il semble que le problème se situe au niveau de l'utilisation de la fonction input.nextInt() . Si je le supprime, alors les deux string1 = input.nextLine() y string2 = input.nextLine() sont exécutées comme je le souhaite.

777voto

Rohit Jain Points 90368

C'est parce que le Scanner#nextInt ne lit pas le dernière ligne droite caractère de votre contribution, et donc que nouvelle ligne est consommé lors du prochain appel à Scanner#nextLine

Solution : -

  • Soit tirer à blanc Scanner#nextLine appeler après Scanner#nextInt pour consommer nouvelle ligne

    int option = input.nextInt();
    input.nextLine();  // Consume newline left-over
    String str1 = input.nextLine();
  • Ou, ce serait encore mieux, si vous lisiez l'entrée à travers Scanner#nextLine et convertissez votre entrée en nombre entier en utilisant Integer#parseInt(String) méthode.

    int option = 0;
    try {
        option = Integer.parseInt(input.nextLine());
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }
    String str1 = input.nextLine();

Vous rencontrerez le même comportement lorsque vous utiliserez Scanner#nextLine après Scanner#next() ou tout Scanner#nextXXX méthode pour excepter nextLine lui-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X