控制语句 分支语句 switch
switch语句完整格式
- expression 中执行完必须是个值并且必须是 int或者枚举或者字符串类型
- break语句只要执行,switch就要结束
- default语句不是必须的,但是建议写上,这样程序更加健壮
switch(expression){
	//expression 中执行完必须是个值value,并且必须是 int 或者 枚举 或者 字符串类型
	case value1:
		//当 expression的值等于 value1时,执行这里代码
		break;
	case value2:
		//当 expression的值等于 value2时,执行这里代码
		break;
	case value3:
		//当 expression的值等于 value3时,执行这里代码
		break;
		//...
	default:
		//当expression的值与所有的case语句都不匹配时,执行这里的代码
switch语句完成的if语句一定可以完成,但是在一些情况下switch写代码更加好
---
package chapter2;
import java.util.Scanner;
public class switch01 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入月份: ");
        int month = s.nextInt();
        String season = "您输入的月份不存在";
        //case可以合并
        switch (month) {
            case 3: case 4: case 5:{
                season = "春季";
                //break如果没有,可能会有case穿透现象
                break;
            }
            case 6: case 7: case 8:{
                season = "夏季";
                break;
            }
            case 9: case 10: case 11:{
                season = "秋季";
                break;
            }
            case 12: case 1: case 2:{
                season = "冬季";
                break;
            }
        }
        System.out.println(season);
    }
}
如果没有break会有case穿透现象存在
例如:
package chapter2;
import java.util.Scanner;
public class switch01 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入月份: ");
        int month = s.nextInt();
        String season = "您输入的月份不存在";
        //case可以合并
        switch (month) {
            case 3: case 4: case 5:{
                season = "春季";
                //break如果没有,可能会有case穿透现象
//                break;
            }
            case 6: case 7: case 8:{
                season = "夏季";
//                break;
            }
            case 9: case 10: case 11:{
                season = "秋季";
                break;
            }
            case 12: case 1: case 2:{
                season = "冬季";
                break;
            }
        }
        System.out.println(season);
    }
}
输出:
 
 
package chapter2;
/*
编写一个计算器
输入符号为“+” 则输出两个数的和,输出符号为“-”则输出两个数的差
 */
import java.sql.PreparedStatement;
import java.util.Scanner;
public class switch02 {
    public static void main(String[] args) {
        int result = 0;
        System.out.println("欢迎使用简易版计算器");
        Scanner s = new Scanner(System.in);
        System.out.println("请输入第一个数字");
        int num1 = s.nextInt();
        System.out.println("请输入第二个数字");
        int num2 = s.nextInt();
        System.out.println("请输入运算符");
        String oper = s.next();
        switch (oper) {
            case "+": {
                result = num1 + num2;
                break;
            }
            case "-":{
                result = num1 - num2;
                break;
            }
            case "*":{
                result = num1 * num2;
                break;
            }
            case "/":{
                result = num1 / num2;
                break;
            }
            case "%":{
                result = num1 % num2;
                break;
            }
            default:{
                System.out.println("不支持运算!");
            }
        }
        System.out.println(num1 + oper + num2 + "=" + result );
    }
}
switch语句注意事项
- switch适用于判断固定值,if适用于判断返回和区间。switch能做的if肯定能做,但是if能完成的switch不一定能完成
- case语句中的值必须是字面量而不是变量
- case语句的值必须和switch值的类型一致
- 每个switch语句必须加上一个break语句,防止case穿透现象
- 一般都有一个default分支处理紧急情况
- default可以放在任意位置,但是一般放在最后
java12中switch新特性,代码变得更加简洁
switch(x){
	case 1 -> System.out.println(1);
	case 2 -> System.out.println(2);
	case 3 -> System.out.println(3);
	default -> Systemout.out.println("default");
}
switch(x){
	case 1, 2, 3 -> System.out.println("1,2,3");
}
switch(x){
	case 1 -> {
		System.out.println(1);
		System.out.println(1);
	}
}
switch (oper) {
            case "+" -> {
                result = num1 + num2;
            }
            case "-" -> {
                result = num1 - num2;
            }
            case "*" -> {
                result = num1 * num2;
            }
            case "/" -> {
                result = num1 / num2;
            }
            default -> {
                System.out.println("错误");
            }
        }

















![[HackMyVM] Quick](https://img-blog.csdnimg.cn/direct/6c324b3fe0d343f3bb8aad1d2f86219d.png)

