使用以下用Java编写的代码:
choice = keyboard.nextByte();
switch (choice)
{
case (byte) 4:
System.out.print("Input the layout type: ");
layoutType = keyboard.nextLine();
System.out.print("Input the layout name: ");
layoutName = keyboard.nextLine();
break;
default:
break;
}
当我运行程序时,我得到以下内容:
输入布局类型:输入布局名称:
我立刻得到提示输入两个输入!这是为什么?程序不应该停在“keyboard.nextLine()
”的位置吗?它在switch
语句之外执行,但不在其中。为什么提示用户输入switch
语句会导致这种奇怪的行为?
=================================== UPDATE:
是的,没错。 keyboard
是java.util.Scanner
类的实例。
答案 0 :(得分:2)
这是因为您正在输入换行符以读取字节,并且换行符被视为后续调用readLine()
的输入。在readLine()
之后添加一个虚拟readByte()
来解决此问题:
choice = keyboard.nextByte();
keyboard.readLine(); // dummy readline
答案 1 :(得分:1)
假设keyboard
是java.util.Scanner
的对象,问题在于以下内容。
首先,使用nextByte()
读取一个字节,因此只将字节值作为输入。剩下的值,在这种情况下,换行符仍然在输入流中。它被keyboard.nextLine()
读取为输入并返回。因此该行返回一个空字符串。因此,您可能需要进行额外的nextLine()
调用以丢弃该新行,如下所示:
System.out.print("Input the layout type: ");
keyboard.nextLine();
layoutType = keyboard.nextLine();
System.out.print("Input the layout name: ");
layoutName = keyboard.nextLine();