我正在尝试使用switch的以下System.in.read()语句:

char ch1, ch2;

    ch1 = (char) System.in.read();
    switch(ch1) {
        case 'A':
            System.out.println("This A is part of outer switch.");
            ch2 = (char) System.in.read();
//                ch2 = 'A';
            switch(ch2) {
                case 'A':
                    System.out.println("This A is part of inner switch");
                    break;
                case 'B':
                    System.out.println("This B is part of inner switch");
                    break;
            } // end of inner switch
            break;
        case 'B': // ...


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

似乎没有被执行,除非明确声明ch2 = 'A',否则不会执行内部的switch语句。那么如何使第二个read()工作呢?

最佳答案

好的,必须做一些实验,但是我敢打赌,输入第一个字符后您要按Enter键吗?如果是,则将ch2设置为该击键。

您可以做的就是告诉输入流,在获得第一个字符后立即通过System.in.skip(1)跳过输入流。然后,调用ch2将可以正常工作。可能有很多更好的方法来读取输入,但是由于每次输入一个字符时,您都要输入两个,因此需要跳过最后一个。

所以重申一下:

ch1 = (char) System.in.read();
System.in.skip(1);//Skip the next keystroke, which is enter
switch(ch1) {
    case 'A':
        System.out.println("This A is part of outer switch.");
        ch2 = (char) System.in.read();
//                ch2 = 'A';
        switch(ch2) {

10-04 20:04