JAVA переходит в дефолт в switch-case - PullRequest
0 голосов
/ 06 ноября 2018

Это код из Системы поддержки принятия решений, который я пытаюсь создать. В основном вопрос в том, хотите ли вы завтрак или нет. StdIn.readChar() используется для чтения символа, который вы вставляете в консоль. Я на 100% уверен, что это правильно.

Очевидно, что отсутствует основной метод, я думаю, что без него понятно, но если вам это нужно, я могу вставить его позже.

Теперь мой вопрос:

Если я запускаю эту программу, меня в основном спрашивают, голоден я или нет. Поэтому я набираю j (на немецком языке «ja» означает «да»), и программа переходит к методу «Завтрак». Но затем меня спрашивают, хочу ли я завтракать, но нет времени вставлять чарса. Он напрямую переходит в метод Default. Я использовал команду печати, чтобы увидеть, в какой точке, как вы можете видеть. Я сделал что-то не так с выбором корпуса переключателя?

Моя консоль говорит так:

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 голосов
/ 06 ноября 2018

Нажатие ввода фактически дает два символа: Содержит ли возврат каретки Windows \ r \ n состоит из двух символов или одного символа?

Итак, в вашем случае вы сначала прочитали символ J, а по второму вопросу вы уже ответили вторым символом, исходящим от нажатия кнопки Enter.

Надеюсь, это поможет!

...