我正在使用这些Scanner方法nextInt()并nextLine()读取输入。
Scanner
nextInt()
nextLine()
它看起来像这样:
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)
问题是输入数值后,第一个input.nextLine()被跳过,第二个input.nextLine()被执行,这样我的输出是这样的:
input.nextLine()
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
我测试了我的应用程序,看起来问题在于使用input.nextInt(). 如果我删除它,那么两者string1 = input.nextLine()都string2 = input.nextLine()将按照我的意愿执行。
input.nextInt()
string1 = input.nextLine()
string2 = input.nextLine()
这是因为该Scanner.nextInt方法不会读取通过按“Enter”创建的输入中的 换行符,因此在读取该 换行符Scanner.nextLine后调用返回。 __
Scanner.nextInt
Scanner.nextLine
当您使用Scanner.nextLineafterScanner.next()或任何Scanner.nextFoo方法(除了nextLine它自己)时,您会遇到类似的行为。
Scanner.next()
Scanner.nextFoo
nextLine
解决方法:
要么Scanner.nextLine在每个之后打一个电话,Scanner.nextInt要么Scanner.nextFoo消耗该行的其余部分,包括 换行符
int option = input.nextInt();
input.nextLine(); // Consume newline left-over String str1 = input.nextLine();
或者,更好的是,通读输入Scanner.nextLine并将您的输入转换为您需要的正确格式。例如,您可以使用Integer.parseInt(String)方法转换为整数。
Integer.parseInt(String)
int option = 0;
try { option = Integer.parseInt(input.nextLine()); } catch (NumberFormatException e) { e.printStackTrace(); } String str1 = input.nextLine();