Le code simple du scanner Java ne fonctionne pas [dupliquer]


Cette question a déjà une réponse ici:

Voici le squelette de code que j'écris pour faire un jeu simple:

    Scanner in = new Scanner(System.in);

    String name;
    String playing;
    int age;

    do {

        System.out.println("Enter your name");
        name = in.nextLine();

        System.out.println("Enter your age");
        age = in.nextInt();

        System.out.println("Play again?");
        playing = in.nextLine();

    } while (true);

Le code ne fonctionne pas comme prévu, par exemple, voici le fonctionnement attendu du code:

Enter your name
John
Enter your age
20
Play again?
Yes
Enter your name
Bill
...

Cependant, il y a un problème avec la lecture de la ligne Play again, c'est le réel sortie:

Enter your name
John
Enter your age
20
Play again?
Enter your name

Comme vous pouvez le voir, "Entrez votre nom" s'affiche à nouveau avant "Rejouer?"est en mesure d'accepter l'entrée. Lors du débogage, la variable de lecture est définie sur"", il n'y a donc aucune entrée que je puisse voir et je ne peux pas comprendre ce qui est consommé. Toute aide serait appréciée, merci!

Author: Mat, 2012-05-06

4 answers

nextInt() ne consomme pas la fin de ligne, même si le int est la seule chose là-dedans.

Ajoutez un autre nextLine() après avoir lu le int, et jetez complètement sa valeur ou vérifiez qu'elle est vide si vous voulez empêcher les gens d'entrer autre chose qu'un int.

 5
Author: Mat, 2012-05-06 06:02:47

Le problème est qu'après avoir appelé nextInt (), il y a toujours un '\n' dans le tampon et c'est donc ce qui est passé. utilisation dans.next() au lieu de dans.nextLine().

 3
Author: Timothy Swartz, 2012-05-06 06:03:10

Utilisez la méthode next () dans la classe Scanner au lieu de la méthode nextLine ().

    Scanner in = new Scanner(System.in);

    String name;
    String playing;
    int age;

    do {

        System.out.println("Enter your name");
        name = in.next();

        System.out.println("Enter your age");
        age = in.nextInt();

        System.out.println("Play again?");
        playing = in.next();

    } while (true);

Pour plus d'informations, reportez-vous à Documentation Java pour la classe Scanner Sortie:

Enter your name
Kanishka
Enter your age
23
Play again?
Yes
Enter your name
....
 0
Author: Kanishka Dilshan, 2012-05-06 05:59:30

Vous devez utiliser le code suivant pour la lecture de la ligne suivante.

Scanner scanner = new Scanner(System.in).useDelimiter("\n");

Et pour lire la ligne, vous devez écrire

scanner.next();
 0
Author: Bhavik Ambani, 2012-05-06 06:24:02