Java中的Switch / Case控制台菜单

时间:2015-11-04 22:24:04

标签: 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在完成案例后两次向我显示菜单。有什么建议?

1 个答案:

答案 0 :(得分:2)

当您按Enter

时,此行会读取您键入的每个字符,包括新行'\n'
ch = (char) System.in.read();

一个简单的解决方案是进行另一次读取并丢弃结果。 E.g。

    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');