簡體   English   中英

Java 在開關中調用方法

[英]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: 將檢查一個整數。

  1. 在進入switch語句之前聲明birthDay 這個想法是您希望在您訪問一個(並且只有一個)案例時設置此值。

  2. 根據您對daysInMonth的定義,您最終可能會遇到未處理的default情況。 您應該考慮如何定義和約束 switch 控制變量(可能使用枚舉),這樣您就不能有默認情況。

  3. 確保daysInMonth是 String,並且 case 正在執行的.equals()符合您的期望。 我不確定像這樣不匹配的編譯時錯誤會引發什么問題,但是一個好的 IDE 肯定會警告您。

你的抽象層次是錯誤的。

您不應在開關內調用getRangedInt() 相反,您應該有一個名為getNumberOfDays()的方法,它接受一個選擇月份的輸入(可以是一個字符串,如“January”、“February”、一個 int 或一個枚舉)。 第二種方法可以在其中使用開關; 但你不應該在其他任何地方切換。 推理:關於一個月有多少的知識應該只在一個地方。 在您的解決方案中,您需要在處理“每月天數”的每個地方都使用相同的開關。 導致代碼重復,應該不惜一切代價避免。

然后您使用該其他方法的返回值調用您的方法getRangedInt()

暫無
暫無

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

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