Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在switch case中通过不获取另一个case的值来生成if语句?_Java_Algorithm_Switch Statement - Fatal编程技术网

Java 如何在switch case中通过不获取另一个case的值来生成if语句?

Java 如何在switch case中通过不获取另一个case的值来生成if语句?,java,algorithm,switch-statement,Java,Algorithm,Switch Statement,现在我有一个问题,我想用这个来运行我的代码 我在2月检查案例2,如果year为true,然后运行execute if语句如果为false,它将进入默认状态,但现在它进入案例3语句如何解决该问题,而不是进入案例3,而是进入默认状态 //这是我的密码 public static void main(String[] args) { getDaysInMonth(1, 2018); System.out.println(getDaysInMonth(2, 2018)); } pub

现在我有一个问题,我想用这个来运行我的代码 我在2月检查案例2,如果year为true,然后运行execute if语句如果为false,它将进入默认状态,但现在它进入案例3语句如何解决该问题,而不是进入案例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; 
}
publicstaticvoidmain(字符串[]args){
getDaysInMonth(2018年1月1日);
系统输出打印LN(getDaysInMonth(2018年2月));
}
公共静态布尔值isLeapYear(整数年){
如果(年份<1和年份>9999){
返回false;
}否则{
如果(第%4年==0){
返回true;
}否则如果(年份%100==0){
返回false;
}否则如果(年份%400==0){
返回true;
}否则{
返回false;
}
}         
}
公共静态int getDaysInMonth(int月,int年){
如果((月<1 |月>12)和(年<1 |年>9999)){
返回-1;
}
年(年);
国际日;
开关(月){
案例1:
天数=31天;
打破
案例2:
如果(年份==1){
天数=29天;
打破
} 
案例3:
天数=31天;
打破
案例4:
天数=30天;
打破
案例5:
天数=31天;
打破
案例6:
天数=30天;
打破
案例7:
天数=31天;
打破
案例8:
天数=31天;
打破
案例9:
天数=30天;
打破
案例10:
天数=31天;
打破
案例11:
天数=30天;
打破
案例12:
天数=31天;
打破
违约:
天数=28天;
打破
}
返程天数;
}

发生这种情况是因为您的
中断
范围内,如果
范围->那么如果年份不是1,则继续到案例3

您可以使用
if-else
子句:

    case 2:
        if(year == 1) {
            days = 29;
        } else {
            days = 28;
        }
        break;
但我必须提醒你,
年!=1
并不意味着2月28日,也许您想要:

    case 2:
        if(!isLeapYear(year)) {
            days = 29;
        } else {
            days = 28;
        }
        break;

发生这种情况是因为您的
中断
如果
范围->那么如果年份不是1,则继续到案例3

您可以使用
if-else
子句:

    case 2:
        if(year == 1) {
            days = 29;
        } else {
            days = 28;
        }
        break;
但我必须提醒你,
年!=1
并不意味着2月28日,也许您想要:

    case 2:
        if(!isLeapYear(year)) {
            days = 29;
        } else {
            days = 28;
        }
        break;

除了关于
if
语句和
switch
的问题外,还有一些问题需要首先使用闰年检查方法来解决。以下是原始代码的开头:

public static boolean isLeapYear(int year) {
    if(year < 1 && year > 9999) {
        return false;
    } else {
        ...
考虑到您的
getDaysInMonth
方法,我们有以下情况,1=一月,2=二月,依此类推:

30天:9月9日、4月4日、6月6日、11月11日

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


关于参数的验证,如果您正在接收用户输入,则应在用于计算的方法之外对其进行验证(传递已验证的方法输入,而不是直接在其内部进行验证)。

除了关于
if
语句和
开关的问题之外,用闰年检验法首先要解决一些问题。以下是原始代码的开头:

public static boolean isLeapYear(int year) {
    if(year < 1 && year > 9999) {
        return false;
    } else {
        ...
考虑到您的
getDaysInMonth
方法,我们有以下情况,1=一月,2=二月,依此类推:

30天:9月9日、4月4日、6月6日、11月11日

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


关于参数的验证,如果您正在接收用户输入,则应在用于计算的方法之外对其进行验证(传递已验证的方法输入,而不是直接在其内部进行验证)。

另外,您的
isLeapYear
返回一个
布尔值,但是您忘记了使用返回值。isLeapYear函数无法正常工作。永远无法到达else if语句。您需要对if语句重新排序,先是%400,然后是%100,最后是%4。为什么要将这种不常见的情况用作默认情况?我预计违约率为30或31。或者,如果达到默认值,最好为无效参数抛出一个错误。
isLeapYear
返回一个
boolean
,但您忘记使用返回值。isLeapYear函数无法正常工作。永远无法到达else if语句。您需要对if语句重新排序,先是%400,然后是%100,最后是%4。为什么要将这种不常见的情况用作默认情况?我预计违约率为30或31。如果你达到默认值,最好为无效参数抛出一个错误。哇,我很感激你能帮我完成它的工作,我不知道在if语句中使用isLeapYear(year)我使用==1,我想它可以我的badoh if(我们调用的方法)如果这个方法是真的,它就会运行,对吗?是的,并添加一个
前进,意味着如果方法是错误的,它将继续。哇,我很感激你帮我完成它的工作,我不知道在if语句中使用isLeapYear(year)我使用==1,我想它可以我的badoh如果(我们调用的方法)它将继续,如果方法是真的,对吗?是的,并添加一个
前进,意味着如果方法为false,它将继续。