web-dev-qa-db-fra.com

Java Scanner n'attend pas l'entrée de l'utilisateur

J'utilise le scanner de Java pour lire les entrées utilisateur. Si j'utilise nextLine une seule fois, cela fonctionne bien. Avec deux nextLine, le premier n'attend pas que l'utilisateur entre la chaîne (le second le fait).

Production:

X: Y: (attendez l'entrée)

Mon code

System.out.print("X: ");
x = scanner.nextLine();
System.out.print("Y: ");
y = scanner.nextLine();

Des idées pourquoi cela pourrait-il arriver? Merci

14
user2976389

Il est possible que vous appeliez une méthode comme nextInt() avant. Ainsi, un programme comme celui-ci:

Scanner scanner = new Scanner(System.in);
int pos = scanner.nextInt();
System.out.print("X: ");
String x = scanner.nextLine();
System.out.print("Y: ");
String y = scanner.nextLine();

démontre le comportement que vous voyez.

Le problème est que nextInt() ne consomme pas le '\n', Donc le prochain appel à nextLine() le consomme et attend ensuite de lire l'entrée pour y.

Vous devez consommer le '\n' Avant d'appeler nextLine().

System.out.print("X: ");
scanner.nextLine(); //throw away the \n not consumed by nextInt()
x = scanner.nextLine();
System.out.print("Y: ");
y = scanner.nextLine();

(en fait, une meilleure façon serait d'appeler directement nextLine() après nextInt()).

35
Alexis C.