亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過不獲取另一種情況的值來制作if語句在switch情況下?

如何通過不獲取另一種情況的值來制作if語句在switch情況下?

皈依舞 2021-05-14 18:15:05
現在我有一個問題,我想以此來運行我的代碼,以便檢查案例2的februay(如果year為true),而不是運行execute if語句(如果它為false),它將變為默認值,但是現在轉到case 3語句如何解決不是轉到case 3而是轉到默認值的問題?//這是我的代碼public static void main(String[] args) {    getDaysInMonth(1, 2018);    System.out.println(getDaysInMonth(2, 2018));}public static boolean isLeapYear(int year) {    if(year < 1 && year > 9999) {        return false;    } else {        if(year % 4 == 0) {            return true;        } else if(year % 100 == 0) {            return false;        } else if(year % 400 == 0) {            return true;        } else {            return false;        }    }         }public static int getDaysInMonth(int month, int year) {    if((month < 1 || month > 12) && (year < 1 || year > 9999)) {        return -1;    }    isLeapYear(year);    int days;    switch(month) {        case 1:            days = 31;            break;        case 2:            if(year == 1) {                days = 29;                break;            }         case 3:            days = 31;            break;        case 4:            days = 30;            break;        case 5:            days = 31;            break;        case 6:            days = 30;            break;        case 7:            days = 31;            break;        case 8:            days = 31;            break;        case 9:            days = 30;            break;        case 10:            days = 31;            break;        case 11:            days = 30;            break;        case 12:            days = 31;            break;                        default:            days = 28;            break;                 }      return days; }
查看完整描述

2 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

發生這種情況是因為您break在IF范圍內->如果年份不是1,則繼續第3種情況。


您可以使用if else子句:


    case 2:

        if(year == 1) {

            days = 29;

        } else {

            days = 28;

        }

        break;

但是我要提醒您,year != 1這并不意味著它的2月獲得28天,也許您想要這樣:


    case 2:

        if(!isLeapYear(year)) {

            days = 29;

        } else {

            days = 28;

        }

        break;


查看完整回答
反對 回復 2021-05-19
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

除了關于if語句和的switch問題外,首先使用leap年檢查的方法還需要解決一些問題。這是下面原始代碼的開頭:


public static boolean isLeapYear(int year) {

    if(year < 1 && year > 9999) {

        return false;

    } else {

        ...

這種情況year < 1 && year > 9999永遠不會發生,因為year不能同時小于1和大于9999,所以這是多余的。


除此之外,用于確定年份是否為a年的算法如下(以純英語顯示):


看看該年份是否可以被4整除。如果不是,則該年份不能是a年(返回false)。

在這里,一年可以平均除以4(在步驟1中確定)。如果不能被100整除,則為is年(返回true)。

在這里,年份可以被4除以100,也可以除以100。如果該年份也可以被400除以,那么它就是leap年。否則不是。

將以上所有考慮因素放入代碼中,可以使其更具可讀性:


public static boolean isLeapYear(int year) {

    if (year % 4 != 0) {

        // year is not evenly divisible by 4 (it has a remainder, can't be a leap year). 

        return false;

    }

    // year is evenly divisible by 4

    if (year % 100 != 0) {

        // divisible by 4 and not 100, it's a leap year

        return true;

    }

    // divisible by 4 and also 100

    if (year % 400 != 0) {

        // divisible by 4, 100 and not by 400

        return false;

    }


    // divisible by 4, 100 and 400

    return true;

}

考慮到您的getDaysInMonth方法,我們有以下情況,其中1 =一月,2 =二月,依此類推:


30天:9月(9),4月(4),6月(6),11月(11)


31天:除2月(2)以外的所有其他日子(a年28、29)


public static int getDaysInMonth(int month, int year) {

    switch (month) {

        case 9:

        case 4:

        case 6:

        case 11:

            return 30;

        case 2:

            if (isLeapYear(year)) {

                return 29;

            } else {

                return 28;

            }

        default:

            return 31;

    }

}

關于參數的驗證,如果您正在接收用戶輸入,則應在用于計算的方法之外對所有參數進行驗證(傳遞已被驗證的方法輸入,而不是直接在其中進行驗證)。


查看完整回答
反對 回復 2021-05-19
  • 2 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號