When my code is like below:
JavaScript
x
Scanner sc = new Scanner(System.in);
System.out.println(sc.hasNext());
System.out.println(sc.hasNext());
and I input 1, the following is what’s printed in the console
JavaScript
1 // input 1
true
true
But when I add a System.out.println(“str -> ” + sc.next()); after calling the first println(), like this:
JavaScript
System.out.println(sc.hasNext());
System.out.println("str -> " + sc.next());
System.out.println(sc.hasNext());
I also input a 1, what’s printed in the console has changed like this:
JavaScript
1 // input 1
true
str -> 1
1 //input 1
true
Why can I input 1 twice when I add a System.out.println(“str -> ” + sc.next()); after calling the first println()?
Advertisement
Answer
You can call hasNext() as many times in succession as you want, but it’s still going to report on the next thing in the input stream.
It cannot tell you anything about the next token after the next token.
You have to read the next token first before you can ask what is after it.