switch-case

java switch参数类型 java中switch default_后端

说明:

①根据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+"天");


	}
}

进阶版例题挑战(在上题基础上再输入年判断天数):

java switch参数类型 java中switch default_java switch参数类型_02

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+"天");


	}
}

java switch参数类型 java中switch default_java switch参数类型_03

java switch参数类型 java中switch default_System_04

注意:

①凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。

②写分支结构时,二者的都可以的且switch中表达式的取值情况不多时,尽量选用switch-case。switch-case执行效率稍高。