Java 流程控制结构
一,switch-case 结构
1,switch-case 语法说明
介绍 switch-case 的语法格式
/**
* 分支结构只之wsitch-case的使用
* 1. 语法格式
*
* switch(表达式){
* case 常量1:
* // 执行语句1
* // break;
* case 常量2:
* //执行语句2
* //break;
* ...
* default: (类似于else)
* //执行语句2
* //break;
* }
*
* 2. 执行过程
* 根据表达式中的值,依次匹配case语句,一旦与某一个case中的常量相等,那么就执行此case中的执行语句。
* 执行完此执行语句之后
* 情况1:遇到break,则执行 break 后,跳出当前的 switch-case 结构
* 情况2:没有遇到 break ,则继续执行其后的case中的执行语句 -> case 穿透
* 直到遇到break 或者执行完所有的case及default中的语句 退出
*
* 3. 说明:
* switch 中的表达式只能是特定的数据类型,如下:byte \ short \ char \ int \ 枚举(JDK5.0 新增) \ String(JDK7.0新增)
* case 后面跟的都是常量,使用表达式与这些常量做相等的判断,不能进行范围的判断
* 开发中,使用 switch-case 时,通常 case 匹配的情况都有限。
* break:可以使用在switch-case中。一旦执行此break关键字。就跳出当前的switch-case结构
* default: 类似与 if-else 中的 else 结构 default 是可选的,而且位置是灵活的
*/
class SwitchCaseTest{ //如果不在条件最后面家上 break 的话,那么就算执行了这个分支,他还是不会结束,把后面的分支一起输出。比如我的num是1,到case 1的时候应该输出了,然后输出了one还没结束,把后面的 "没有这个数字也输出了"
public static void main(String[] args){
int num = 1;
switch (num) {
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break; //结束当前的 switch-case 结构
default:
System.out.println("没有这个数字");
break;
}
//第二个例子,String
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;
}
}
}
2,案例: 输入一个月份和一个天数判断是第几天
利用了 switch-case 穿透性
/**
* 案例:编写程序,键盘上输入2023年的"month" 和 "day",要求通过程序输出输入的日期为2023年的第几天。
* switch-case 和 if-else 之间的转换
* 开发中凡是可以使用switch-case结构的场景,都可以改写为if-else,反之,不成立
* 开发中,如果一个具体问题既可以使用switch-case,又可以使用if-else的时候,推荐使用switch-case,
* 为什么? 因为 switch-case相较与if-else效率稍高。
*/
import java.util.Scanner;
class SwitchCaseTest2{
public static void main(String[] args) {
//1.使用Scanner,从键盘获取2023年的month,day
Scanner input = new Scanner(System.in);
int month = input.nextInt(); //阻塞式方法
int day = input.nextInt();
//2.使用switch-case实现分支结构
int sumDays = 0;
switch (month) { //利用 switch case 的穿透性,如果是 12 月那么就从上往下加下去
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("2023年" + month + "月" + day + "日是当前的第" + sumDays + "天");
input.close(); // 为了防止内存泄漏
}
}