Java-scanner wacht niet op gebruikersinvoer [DUPLICEER]

Ik gebruik Java’s Scanner om de gebruikersinvoer te lezen. Als ik een keer één keer gebruik maak, werkt het goed. Met twee nextline wacht eerst op de gebruiker om de tekenreeks in te voeren (tweede doet).

Uitgang:

x: y: (wacht op invoer)

Mijn code

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

alle ideeën waarom zou dit kunnen gebeuren? Bedankt


Antwoord 1, Autoriteit 100%

Het is mogelijk dat u een methode als nextInt()eerder belt. Dus een programma als deze:

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

Demonstates het gedrag dat u ziet.

Het probleem is dat nextInt()niet de '\n'verbruikt, dus de volgende oproep naar nextLine()verbruikt het En dan wacht het om de invoer voor te lezen voor y.

U moet de '\n'gebruiken voordat u nextLine()roept.

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

(eigenlijk een betere manier zou zijn om rechtstreeks te bellen nextLine()NA <nextInt()).

Other episodes