[英]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.