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
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.
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.
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.
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.
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()
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With