Java 如何在switch case中通过不获取另一个case的值来生成if语句?
现在我有一个问题,我想用这个来运行我的代码 我在2月检查案例2,如果year为true,然后运行execute if语句如果为false,它将进入默认状态,但现在它进入案例3语句如何解决该问题,而不是进入案例3,而是进入默认状态 //这是我的密码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
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,它将继续。