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