为什么我的switch语句会出现这种奇怪的行为?

时间:2011-12-08 18:27:22

标签: java 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语句会导致这种奇怪的行为?

=================================== UPDATE:

是的,没错。 keyboardjava.util.Scanner类的实例。

2 个答案:

答案 0 :(得分:2)

这是因为您正在输入换行符以读取字节,并且换行符被视为后续调用readLine()的输入。在readLine()之后添加一个虚拟readByte()来解决此问题:

choice = keyboard.nextByte();
keyboard.readLine(); // dummy readline

答案 1 :(得分:1)

假设keyboardjava.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();