Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Scanner doesn't wait for user input [duplicate]

I am using Java's Scanner to read user input. If I use nextLine only once, it works OK. With two nextLine first one doesnt wait for user to enter the string(second does).

Output:

X: Y: (wait for input)

My code

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

Any ideas why could this happen? Thanks

like image 982
user2976389 Avatar asked May 03 '14 22:05

user2976389


People also ask

Does Java Scanner wait for input?

A scanning operation may block waiting for input. The next() and hasNext() methods and their primitive-type companion methods (such as nextInt() and hasNextInt() ) first skip any input that matches the delimiter pattern, and then attempt to return the next token.

Why does Java skip nextLine ()?

It's because when you enter a number then press Enter , input. nextInt() consumes only the number, not the "end of line". When input. nextLine() executes, it consumes the "end of line" still in the buffer from the first input.

Can you use the same Scanner twice in Java?

You can get multiple user inputs from the same instance of Scanner. Here is an example: Scanner input = new Scanner(System.in); int x = input. nextInt(); int y = input.

Why nextLine is not working after nextDouble?

The reason it gives you trouble is because when the user enters an integer then hits enter, two things have just been entered - the integer and a "newline" which is \n. The method you are calling, "nextInt", only reads in the integer, which leaves the newline in the input stream.


1 Answers

It's possible that you are calling a method like nextInt() before. Thus a program like this:

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

demonstatres the behavior you're seeing.

The problem is that nextInt() does not consume the '\n', so the next call to nextLine() consumes it and then it's waiting to read the input for y.

You need to consume the '\n' before calling 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(); 

(actually a better way would be to call directly nextLine() after nextInt()).

like image 52
Alexis C. Avatar answered Sep 18 '22 21:09

Alexis C.