switch(month){
case 1|3|5|7|8|10|12:
System.out.println(month+"月有31天");
break;
case 4|6|9|11:
System.out.println(month+"月有30天");
break;
default:
System.out.println(month+"月有28天");
}
这是我的代码,判断月份的天数,如果注释第二个case不会报错,但不注释就会报错。java中可以这样写吗
不可以的。你可以换个方式,像这样写,这样当遇到1、3、5、7、8、10、12时,都走12下的那段代码。
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month+"月有31天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month+"月有30天");
break;
default:
System.out.println(month+"月有28天");
}
另外,其实实际中switch case可以用变通的形式来实现,像你这个场景可以用数组的形式实现。
public class Test {
public static void main(String []args) throws SQLException{
int [] array = {31,28,31,30,31,30,31,31,30,31,30,31};
int month = 2;
System.out.println(month+"月有"+array[month]+"天");
}
}
case 1:
case 3:
case 5 :
case 7:
...
break;
这是正确的写法
楼主你说的报错是不是"Duplicate case"啊。。这个代表case情况不唯一。。由于case后面只能跟int类型的值(即便后面的jdk版本中增加了String的支持,其实还是取的String的hashcode值,终究是int)。
既然是int且case情况不唯一,咱们就得分析一下(1|3|5|7|8|10|12)和(4|6|9|11)的结果究竟是什么了,你原本的意思是想判断假如是1月或3月或5月。。
但是在java中'|'既可以做逻辑运算符又可以做位运算符,在这里由于左右均是int类型,这里的'|'是位运算符。然后你分别打印上面两个表达式的值,如下图,你就会明白为什么报Duplicate case了。
不可以,你要么case12下,要么就用if,if(x=1||x=3){system.out.println();}
不可以这样子写的,每个case后面只能跟一个值
case 1|2|3这种写法是错误的
case 1:
case 2:
case 3:
break;
这个是正解~
其实你还可以用这种更灵活准确的方法:
int month=2;
Date d1=new Date();
d1.setMonth(month-1);
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(d1); // 要计算你想要的月份,改变这里即可
int days = rightNow.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(d1.getYear()+"年"+month+"月的总天数:"+days);
不可以的
不可以的
变相的使用 switch 穿透
switch(num){
case 1:
case 2:
case 3:
consloe.log('小于4');
break;
case 5:
consloe.log('大于4');
break;
}