关于if ... else条件不起作用

时间:2019-05-09 15:33:12

标签: java return-value return-type

下面显示的代码可以正常工作,但仅适用于一部分,如果输入的月份小于1或大于12且输入的年份小于1的if ... else语句必须返回-1或超过9999

我已经编译了很多次,甚至尝试重新排列条件,例如将less更改为大于,然后再将整个switch语句放入if语句中。似乎没有任何作用

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

        int maxDay = 31;
        int secMaxDay = 30;
        int specialDay = 29;
        int minDay = 28;

    if ((month < 1 || month > 12) && (year < 1 || year > 9999)) {
        return -1;

    } else {
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                return maxDay;

            case 2:
                if (isLeapYear(year)){
                    return specialDay;
                } else {
                    return minDay;
                }

            default:
                return secMaxDay;
        }
    }
}

我上面的代码的预期输出是,当月份或年份或两者的值小于1或大于最大值时,它应返回-1。

2 个答案:

答案 0 :(得分:3)

如果两个条件都成立,则您仅返回-1

所以您必须更改

if ((month < 1 || month > 12) && (year < 1 || year > 9999))

使用

if ((month < 1 || month > 12) || (year < 1 || year > 9999))

您可以像这样美化它:

if (month < 1 || month > 12 || year < 1 || year > 9999)

问题是(例如)如果month < 1 || month > 12为true但year < 1 || year > 9999为false,则true && false返回false。仅当两个条件都成立时,它才会返回true。

答案 1 :(得分:1)

您真的只想在年份和月份都不好的时候返回-1吗?或者,如果是这样的话,一旦错误,则月份和年份之间的&&应该是||。也是