java中分支结构之二:switch-case

/*
分支结构之二:switch-case

1.格式
switch(表达式){
case 常量1:
执行语句1;
//break;

case 常量2:
执行语句2;
//break;

default:
执行语句n;
//break;

}

2.说明:
① 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止。

② break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构

③ switch结构中的表达式,只能是如下的6种数据类型之一:byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)

④ case 之后只能声明常量。不能声明范围。

⑤ break关键字是可选的。

⑥ default:相当于if-else结构中的else.
default结构是可选的,而且位置是灵活的。
*/

class SwitchCaseTest {
public static void main(String[] args) {

	int number = 5;
	switch(number){
	
	case 0:
		System.out.println("zero");
		break;
	case 1:
		System.out.println("one");
		break;
	case 2:
		System.out.println("two");
		break;
	case 3:
		System.out.println("three");
		break;
	default:
		System.out.println("other");
		//break;
	}


	String season = "summer";
	switch (season) {
	case "spring":
		System.out.println("春暖花开");
		break;
	case "summer":
		System.out.println("夏日炎炎");
		break;
	case "autumn":
		System.out.println("秋高气爽");
		break;
	case "winter":
		System.out.println("冬雪皑皑");
		break;
	default:
		System.out.println("季节输入有误");
		break;
	}



	//**************如下的两种情况都编译不通过*********************
	//情况一
	/*
	boolean isHandsome = true;
	switch(isHandsome){
	
	case true:
		System.out.println("我好帅啊~~~");
		break;
	case false:
		System.out.println("我好丑啊~~~");
		break;
	default:
		System.out.println("输入有误~~~");
	}
	*/
	//情况二
	/*
	int age = 10;
	switch(age){
	case age > 18:
		System.out.println("成年了");
		break;
	default:
		System.out.println("未成年");
	}
	*/
}

}


例题
/*
例题:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。

说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。
*/
class SwitchCaseTest1 {
public static void main(String[] args) {

	/*
	int score = 78;
	switch(score){
	case 0:

	case 1:

	case 2:

		...
	case 100:
	
	}
	*/

	/*
	int score = 78;
	if(score >= 60){
	
	}else{
	
	}
	*/
	
	int score = 78;
	switch(score / 10){
	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;

	}
	
	//更优的解决方案:
	switch(score / 60){
	case 0:
		System.out.println("不及格");
		break;
	case 1:
		System.out.println("及格");
		break;
	}

}

}


/*
编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。

2 15: 31 + 15

5 7: 31 + 28 + 31 + 30 + 7

说明:break在switch-case中是可选的
*/
import java.util.Scanner;
class SwitchCaseTest2 {
public static void main(String[] args) {

	Scanner scan = new Scanner(System.in);
	System.out.println("请输入2019年的month:");
	int month = scan.nextInt();
	System.out.println("请输入2019年的day:");
	int day = scan.nextInt();


	//定义一个变量来保存总天数
	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(month == 4){
		sumDays = 31 + 28 + 31 + day;
	}
	//...
	else{//month == 12
		//sumDays = ..... + day;
	}

	*/

	//方式二:冗余
	/*
	switch(month){
	case 1:
		sumDays = day;
		break;
	case 2:
		sumDays = 31 + day;
		break;
	case 3:
		sumDays = 31 + 28 + day;
		break;
	...
	}
	*/

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

}


/*
从键盘分别输入年、月、日,判断这一天是当年的第几天

注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除

2)可以被400整除

说明:

  1. 凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。
  2. 我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),
    又可以使用if-else时,我们优先选择使用switch-case。原因:switch-case执行效率稍高。

*/
import java.util.Scanner;
class SwitchCaseExer {
public static void main(String[] args) {

	Scanner scan = new Scanner(System.in);
	System.out.println("请输入year:");
	int year = scan.nextInt();
	System.out.println("请输入month:");
	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:
		//sumDays += 28;
		//判断year是否是闰年
		if((year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0){
			sumDays += 29;
		}else{
			sumDays += 28;
		}

	case 2:
		sumDays += 31;
	case 1:
		sumDays += day;
	}

	System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");
}

}
if和switch语句很像,具体什么场景下,应用哪个语句呢?
 如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
也就是说,使用switch-case的,都可以改写为if-else。反之不成立。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值