[英]Why such weird behavior from my switch statement?
使用以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
语句中输入内容会导致这种奇怪的行为?
===================================更新:
是的,这是正确的。 keyboard
是java.util.Scanner
类的一个实例。
这是因为您正在输入换行符以读取字节,并且换行符被认为以某种方式被用于随后的readLine()
调用的输入。 在readByte()
之后添加一个哑readLine()
readByte()
以解决此问题:
choice = keyboard.nextByte();
keyboard.readLine(); // dummy readline
假设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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.