如何通过不获取另一种情况的值来制作if语句在switch情况下?

现在我有一个问题,我想以此来运行我的代码,以便检查案例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; 

}



皈依舞
浏览 156回答 2
2回答

ITMISS

发生这种情况是因为您break在IF范围内->如果年份不是1,则继续第3种情况。您可以使用if else子句:&nbsp; &nbsp; case 2:&nbsp; &nbsp; &nbsp; &nbsp; if(year == 1) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; days = 29;&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; days = 28;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; break;但是我要提醒您,year != 1这并不意味着它的2月获得28天,也许您想要这样:&nbsp; &nbsp; case 2:&nbsp; &nbsp; &nbsp; &nbsp; if(!isLeapYear(year)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; days = 29;&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; days = 28;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; break;

智慧大石

除了关于if语句和的switch问题外,首先使用leap年检查的方法还需要解决一些问题。这是下面原始代码的开头:public static boolean isLeapYear(int year) {&nbsp; &nbsp; if(year < 1 && year > 9999) {&nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; ...这种情况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) {&nbsp; &nbsp; if (year % 4 != 0) {&nbsp; &nbsp; &nbsp; &nbsp; // year is not evenly divisible by 4 (it has a remainder, can't be a leap year).&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }&nbsp; &nbsp; // year is evenly divisible by 4&nbsp; &nbsp; if (year % 100 != 0) {&nbsp; &nbsp; &nbsp; &nbsp; // divisible by 4 and not 100, it's a leap year&nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; }&nbsp; &nbsp; // divisible by 4 and also 100&nbsp; &nbsp; if (year % 400 != 0) {&nbsp; &nbsp; &nbsp; &nbsp; // divisible by 4, 100 and not by 400&nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }&nbsp; &nbsp; // divisible by 4, 100 and 400&nbsp; &nbsp; 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) {&nbsp; &nbsp; switch (month) {&nbsp; &nbsp; &nbsp; &nbsp; case 9:&nbsp; &nbsp; &nbsp; &nbsp; case 4:&nbsp; &nbsp; &nbsp; &nbsp; case 6:&nbsp; &nbsp; &nbsp; &nbsp; case 11:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 30;&nbsp; &nbsp; &nbsp; &nbsp; case 2:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (isLeapYear(year)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 29;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 28;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; default:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 31;&nbsp; &nbsp; }}关于参数的验证,如果您正在接收用户输入,则应在用于计算的方法之外对所有参数进行验证(传递已被验证的方法输入,而不是直接在其中进行验证)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java