[英]Java calling a method in a switch
所以我使用 getRangedInt 方法來確定用戶的出生月份和日期,以及用於用戶輸入的掃描儀。 如果他們選擇二月(提示要求用戶提供他們的出生月份編號,所以是 1-12),那么我需要將該月的最大天數更改為 28(其他月份為 30 天,依此類推)。 我正在嘗試使用開關來對月份進行分類,但是當程序運行時,它只是跳過並且永遠不會調用該方法。 該方法本身適用於其他示例。 我錯過了什么?
switch (daysInMonth)
{
case "1":
case "3":
case "5":
case "7":
case "8":
case "10":
case "12":
int birthDay = getRangedInt(input,"Enter your birth day: ",1,31);
break;
case "2":
birthDay = getRangedInt(input,"Enter your birth day: ",1,28);
break;
case "4":
case "6":
case "9":
case "11":
birthDay = getRangedInt(input,"Enter your birth day: ",1,30);
}
如果您將 daysInMonth 作為整數讀取,則所有測試用例都將
為假,因為您正在檢查字符串值,案例“1”檢查
字符串“1”,而 case 1: 將檢查一個整數。
在進入switch
語句之前聲明birthDay
。 這個想法是您希望在您訪問一個(並且只有一個)案例時設置此值。
根據您對daysInMonth
的定義,您最終可能會遇到未處理的default
情況。 您應該考慮如何定義和約束 switch 控制變量(可能使用枚舉),這樣您就不能有默認情況。
確保daysInMonth
是 String,並且 case 正在執行的.equals()
符合您的期望。 我不確定像這樣不匹配的編譯時錯誤會引發什么問題,但是一個好的 IDE 肯定會警告您。
你的抽象層次是錯誤的。
您不應在開關內調用getRangedInt()
。 相反,您應該有一個名為getNumberOfDays()
的方法,它接受一個選擇月份的輸入(可以是一個字符串,如“January”、“February”、一個 int 或一個枚舉)。 第二種方法可以在其中使用開關; 但你不應該在其他任何地方切換。 推理:關於一個月有多少的知識應該只在一個地方。 在您的解決方案中,您需要在處理“每月天數”的每個地方都使用相同的開關。 導致代碼重復,應該不惜一切代價避免。
然后您使用該其他方法的返回值調用您的方法getRangedInt()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.