java - Java 中的 Switch/Case 控制台菜单

标签 java switch-statement

大家好。我在使用 Java 中的 switch/case 菜单时遇到了麻烦。

class ConsoleMenu{
    ConsoleMenu(){
    }
    void ShowMenu(){
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
    }
}
public class Main {
    public static void main(String[] args) throws java.io.IOException {
        ConsoleMenu cs = new ConsoleMenu();
        char ch;
        do {
            cs.ShowMenu();
            ch = (char) System.in.read();
            switch (ch) {
                case '1':{
                    System.out.println("228");
                    break;}
                case '2':{
                    System.out.println("556");
                    break;}
            }
        } while (ch != '0');
    }
} 

当我做出选择时,它会执行类似的操作:

1
2
1
228
1
2
1
2
2
556
1
2
1
2

所以我无法理解为什么 Java 在完成案例后向我显示了两次菜单。有什么建议么?

最佳答案

此行会读取您输入的每个字符,包括按 Enter 键时的新行 '\n'

ch = (char) System.in.read();

一个简单的解决方案是再次读取并丢弃结果。例如

    do {
        cs.ShowMenu();
        ch = (char) System.in.read();
        switch (ch) {
        case '1': {
            System.out.println("228");
            break;
        }
        case '2': {
            System.out.println("556");
            break;
        }
        }
        System.in.read();
    } while (ch != '0');

关于java - Java 中的 Switch/Case 控制台菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33533236/

相关文章:

java - 开关结构 : entering a zip code to associate it with a geographic area but only returning the first digit?

java - 使用java命令部署jenkins war文件

java - 无法使用扩展 AppCompatActivity 找到符号方法 FindViewById(int)

java - 使用重试模板执行自定义重试策略

javascript - 有没有办法改变 switch 语句中的大小写?

使用开关的 Java 4 运算符计算器不起作用

java - Android tcp套接字设置etimedout值

java - 如何创建提供自己的标记的链接?

swift - 切换大小写以在 "hours ago"或 "days ago"之间更改上传日期,比较 Int 值会返回错误

c# - 在 C# 中使用 enum 和 struct 代替 switch 语句