switch-case说明:
①根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应的case结构中,调用其执行语句。
②调用其执行语句后,仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或switch-case结构末尾结束。
③break,可以使用在switch-case结构中,表示一旦执行此关键字,就跳出switch-case结构。
④switch结构中的表达式,只能是如下6种数据类型之一:byte 、short、char、int、枚举类型(jdk5.0新增)、String类型(jdk7.0新增)。
⑤case后只能声明常量,不可以是范围。
⑥default:相当于if-else中的else,default结构是可选的,且位置是灵活的。
//对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
class SwitchCaseTest
{
public static void main(String[] args)
{
/*太麻烦
int score=78;
switch (score){
case 0:
case 1:
...
case 100;
}
*/
/*可行
int score=78;
if(score>=60){
}else{
}
*/
//如果必须使用switch-case
int score=78;
switch(score/10){
//如果switch-case中多个case执行语句相同,可以考虑合并
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("不及格");
break;
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("及格");
break;
}
}
}
//对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
//更优的解决方案
class SwitchCaseTest
{
public static void main(String[] args)
{
int score=78;
switch(score/60){
case 0:
System.out.println("不及格");
break;
case 1:
System.out.println("及格");
break;
}
}
}
例题挑战:
/*编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序
输出输入的日期为2019年的第几天。
eg:
2 15:31+15
5 7:31+28+31+30+7
...
*/
import java.util.Scanner;
class SwitchCaseTest
{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
System.out.println("请输入2019年的月份:");
int month=scan.nextInt();
System.out.println("请输入2019年的day:");
int day=scan.nextInt();
//定义一个变量来保存总天数
/*
一般的if或者switch-case语句过于繁琐,有冗余,存在重复的表达式
int sumDays=0;
if(month==1){
sumDays=day;
}else if(month==2){
sumDays=31+day;
}else if()month==3{
sumDays=31+28+day;
}else if{
...
}...
else{
sumDays=......+day
}
*/
//switch-case新方案(倒着写,不加break,很巧妙):
int sumDays=0;
switch(month){
case 12:
sumDays +=30;
case 11:
sumDays +=31;
case 10:
sumDays +=30;
case 9:
sumDays +=31;
case 8:
sumDays +=31;
case 7:
sumDays +=30;
case 6:
sumDays +=31;
case 5:
sumDays +=30;
case 4:
sumDays +=31;
case 3:
sumDays +=28;
case 2:
sumDays +=31;
case 1:
sumDays +=day;
}
System.out.println("2019年"+month+"月"+day+"日是当年的第"+sumDays+"天");
}
}
进阶版例题挑战(在上题基础上再输入年判断天数):
import java.util.Scanner;
class SwitchCaseTest
{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
System.out.println("请输入年份:");
int year=scan.nextInt();
System.out.println("请输入月份:");
int month=scan.nextInt();
System.out.println("请输入day:");
int day=scan.nextInt();
int sumDays=0;
switch(month){
case 12:
sumDays +=30;
case 11:
sumDays +=31;
case 10:
sumDays +=30;
case 9:
sumDays +=31;
case 8:
sumDays +=31;
case 7:
sumDays +=30;
case 6:
sumDays +=31;
case 5:
sumDays +=30;
case 4:
sumDays +=31;
case 3:
//是否为闰年
if((year%4==0&&year%100!=0) || (year%400==0)){
sumDays+=29;
}else{
sumDays+=28;
}
//二月份天数不确定(闰年29天,非闰年28天),不可写 sumDays +=28;
case 2:
sumDays +=31;
case 1:
sumDays +=day;
}
System.out.println(year+"年"+month+"月"+day+"日是当年的第"+sumDays+"天");
}
}
注意:
①凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。
②写分支结构时,二者的都可以的且switch中表达式的取值情况不多时,尽量选用switch-case。switch-case执行效率稍高。