I am using the
Scanner
methods nextInt()
and
nextLine()
for reading input.
It looks like
this:
System.out.println("Enter
numerical value");
int option;
option = input.nextInt(); // Read
numerical value from input
System.out.println("Enter 1st string");
String string1 = input.nextLine(); // Read 1st string (this is
skipped)
System.out.println("Enter 2nd string");
String string2 =
input.nextLine(); // Read 2nd string (this appears right after reading numerical
value)
The problem is
that after entering the numerical value, the first
input.nextLine()
is skipped and the second
input.nextLine()
is executed, so that my output looks like
this:
Enter numerical
value
3 // This is my input
Enter 1st string // The program is
supposed to stop here and wait for my input, but is skipped
Enter 2nd string
// ...and this line is executed and waits for my
input
I tested my
application and it looks like the problem lies in using
input.nextInt()
. If I delete it, then both string1
and
= input.nextLine()string2 = input.nextLine()
are executed as I want them to be.
class="normal">Answer
That's
because the href="http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt%28%29"
rel="noreferrer">Scanner.nextInt
method does not
read the newline character in your input created by hitting
"Enter," and so the call to href="http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine%28%29"
rel="noreferrer">Scanner.nextLine
returns after
reading that newline.
You
will encounter the similar behaviour when you use
Scanner.nextLine
after href="http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#next%28%29"
rel="noreferrer">Scanner.next()
or any
Scanner.nextFoo
method (except
nextLine
itself).
Workaround:
Either
put aScanner.nextLine
call after each
Scanner.nextInt
orScanner.nextFoo
to
consume rest of that line including newline
int option =
input.nextInt();
input.nextLine(); // Consume newline
left-over
String str1 =
input.nextLine();Or,
even better, read the input throughScanner.nextLine
and
convert your input to the proper format you need. For example, you may convert to an
integer using href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String)"
rel="noreferrer">Integer.parseInt(String)
method.int option =
0;
try {
option = Integer.parseInt(input.nextLine());
}
catch (NumberFormatException e) {
e.printStackTrace();
}
String str1 =
input.nextLine();
No comments:
Post a Comment