繁体   English   中英

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

[英]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语句中输入内容会导致这种奇怪的行为?

===================================更新:

是的,这是正确的。 keyboardjava.util.Scanner类的一个实例。

这是因为您正在输入换行符以读取字节,并且换行符被认为以某种方式被用于随后的readLine()调用的输入。 readByte()之后添加一个哑readLine() readByte()以解决此问题:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM