簡體   English   中英

JAVA在切換時跳入默認設置

[英]JAVA jumps into default at switch-case

這是我嘗試制作的決策支持系統中的代碼。 基本上,問題是您是否要吃早餐。 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;
}

按Enter實際上會給出兩個字符: Windows回車符\\ r \\ n是由兩個字符還是一個字符組成?

因此,在您的情況下,您首先閱讀了J字符,而在第二個問題上,您已經輸入了按下Enter按鈕后的第二個字符。

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM