JAVA在切换时跳入默认设置

时间:2018-11-06 14:59:28

标签: java switch-statement

这是我尝试制作的决策支持系统中的代码。基本上,问题是您是否要吃早餐。 StdIn.readChar()用于读取您在控制台中插入的字符。我100%确信它是正确的。

可能缺少一个主要方法,如果没有它,我相信很容易理解,但是如果需要,可以稍后将其粘贴。

现在我的问题:

如果我运行此程序,则主要会询问我是否饿了。所以我输入j(德语中的“ ja”是“ yes”),程序跳入Breakfast方法。但是随后我被问到是否要早餐,但没有时间插入一个字符。它直接跳到Default方法。如您所见,我已经使用print命令在最中间点看到了。我在切换案例选择方面做错了什么吗?

我的控制台说:

Are you hungry?

(I typed) j

Do you want breakfast?

2 (this is due to the testing println command)

This insert is invalid

Do you want breakfast?

奇怪的是,此刻我能够写出答案。 我在问“您喜欢温暖吗?”时遇到同样的问题,但是我当然无法回答,因为我需要再次回答第一个问题(您要吃早餐)。

你能帮我吗? 我是否需要删除do-while循环? 我做错了吗,我需要删除所有内容? :D

 public static void Breakfast(){
    int a = 0;
    do {
        System.out.println("Do you want Breakfast?");
        char y = StdIn.readChar(); //read Char from console

        switch (y) {
            case 'j':
                System.out.println("Do you like it to be warm?");
                y=StdIn.readChar();

                switch (y) {
                    case 'j':
                        System.out.println("Eggs with Bacon");
                        break;
                    case 'n':
                        System.out.println("Cereal");
                        break;
                    default: 
                        System.out.println("1");
                        a=Default();
                }
                break;
            case 'n':
                Mittagessen();
                break;
            default: 
                System.out.println("2");
                a=Default();

        }
    } while (a!=0);
}

public static int Default (){
    System.out.println("This insert is invalid");
    return 1;
}

1 个答案:

答案 0 :(得分:0)

按Enter键实际上会给出两个字符:Does Windows carriage return \r\n consist of two characters or one character?

因此,在您的情况下,您首先阅读了J字符,而在第二个问题上,您已经通过按下Enter键输入了第二个字符。

我希望这会有所帮助!