switch语句

  1. switch语句也属于选择结构,也是分支语句
  2. switch语句的语法结构:
    一个比较完整的switch语句应该这样编写:
public class SwitchText01 {
    public static void main(String[] args){
        switch(int或String类型的字面值或变量){
            case int或String类型的字面值或变量:
                java语句;
                ...
                break;
            case int或String类型的字面值或变量:
                java语句;
                ...
                break;
            case int或String类型的字面值或变量:
                java语句;
                ...
                break;
            case int或String类型的字面值或变量:
                java语句;
                ...
                break;
            ...
            default :
                java语句;
                ...
        }
            
   }
}
  1. switch语句的执行原理
    switch后面的小括号中的“数据”与case后面的“数据"进行一一匹配,匹配成功的分支执行
    按照自上而下的顺序依次匹配。
  2. 匹配成功的分支执行,分支中最后有”break;“语句的话,整个switch语句终止
  3. 匹配成功的分支执行,分支中没有”break;“语句的话,直接进入下一个分支执行(不进行匹配)
    这种现象被称为:**”case穿透“**现象。【提供"break;"语句可以避免穿透】
  4. 所有分支都没有匹配成功,当有”default:“语句的话,会执行default分支中的程序
  5. switch后面和case后面只能是int或者String类型的数据,不能是探测其他类型。
  • 当然byte,short,char也可以直接写到switch和case后面,因为它们可以进行自动类型转换。
  • byte、short、char可以自动转换成int类型
/*
      long a= 10L;
      int b= a;//编译报错,应该加强制类型转换符
   */

    /*
       long x=100L;
       switch(x){}      //编译报错,long类型无法自动转换为int类型
    */

    //解决编译错误
    long x=100L;
    switch((int)x){}

    byte b= 10;
    switch(b){}

    short s= 10;
    switch(s){}

    char c= 'A';
    switch(c){}

    char cc= 97;
    switch(cc){}

    //编译报错  类型不兼容
    //switch(true){}

    String username="lisi";
    switch(username){}
  1. case可以合并
int i= 10;
switch(i){
    case 1: case 2: case 3: case 10://i=1或2或3或10,以下语句都会执行
	System.out.println("Text Code");
}
  1. 教完整的switch语句,csae穿透、合并实例
/*
   较完整的switch语句
   需求:
       接收用户输入:
           1表示星期一
           2表示星期二
           。。。
           7表示星期日
*/
public class SwitchText01 {
    public static void main(String[] args){
        java.util.Scanner s=new java.util.Scanner(System.in);

        System.out.print("请输入数字:");
        int num=s.nextInt();

        switch(num){
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("您输入的数字有误,请重新输入");
        }

        System.out.println("------------------------------------------------");
        //case穿透
        // 如果某句case后面没跟break语句,那么满足这个条件后,会一直执行到碰见break或者switch语句结束
        //只有当满足某个条件时,才会从这个条件开始一直执行下去
        switch(num){
            case 1:
                System.out.println("星期一");
            case 2:
                System.out.println("星期二");
            case 3:
                System.out.println("星期三");
            case 4:
                System.out.println("星期四");
            case 5:
                System.out.println("星期五");
            case 6:
                System.out.println("星期六");
            case 7:
                System.out.println("星期日");
            default:
                System.out.println("您输入的数字有误,请重新输入");
        }
        System.out.println("------------------------------------------------");
        //case合并
        switch(num){
            case 1: case 0:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("您输入的数字有误,请重新输入");
        }

    }
}
  1. String类型
public class SwitchText02 {
    public static void main(String[] args){
        java.util.Scanner s=new java.util.Scanner(System.in);

        System.out.print("今天是星期几:");
        String dayOfWeek=s.next();

        switch(dayOfWeek){
            case "星期一":
                System.out.println("1");
                break;
            case "星期二":
                System.out.println("2");
                break;
            case "星期日":
                System.out.println("7");
                break;
            default :
                System.out.println("您输入的数据有误");
        }

    }
}
  1. char的switch语句
public class SwitchText02 {
    public static void main(String[] args){
//        char c= 'A';  //高级
//        char c= 'B';  //中级
//        char c= 'C';  //低级
//        char c= 65;   //高级
//        char c= 'D';  //出错了
        char c= 66;//中级
        switch(c){
            case 'A' :
                System.out.println("高级");
                break;
            case 'B' :
                System.out.println("中级");
                break;
            case 'C' :
                System.out.println("低级");
                break;
            default :
                System.out.println("出错了");
        }

        //char的另一种显示方式
        c=67;//低级
        switch(c){
            case 'A' :
                System.out.println("高级");
                break;
            case 'B' :
                System.out.println("中级");
                break;
            case 'C' :
                System.out.println("低级");
                break;
            default :
                System.out.println("出错了");
        }

	}
}
  1. 需求:用switch写一个简单计算器
public class SwitchText03 {
    public static void main(String[] args){
        java.util.Scanner s=new java.util.Scanner(System.in);

        System.out.println("欢迎使用简单计算器计算系统");

        System.out.print("请输入第一个数字:");
        int num1= s.nextInt();

        System.out.print("请输入想要进行的运算符号:");
        String symbol=s.next();

        System.out.print("请输入第二个数字:");
        int num2= s.nextInt();

        int result=0;//因为要接收用户键盘输入,但编译只检查语法,以下输出语句有用到result,所以要给它一个值

        switch(symbol){
            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;
        }
        System.out.println("运算结果:"+num1+symbol+num2+"="+result);

    }
}
  1. 需求: 假设系统给定;一个考生的成绩,成绩可能带有小数点,学生成绩范围在[0-100] 根据学生的成绩判断该学生的成绩等级,成绩可能带有小数
[90-100]A
 [80-90) B
 [70-80) C
 [60-70) D
 [0-60) E

以上的逻辑判断采用switch语句完成,不考虑[0,100]以外的

public class SwitchText04 {
    public static void main(String[] args){
        java.util.Scanner s=new java.util.Scanner(System.in);

        System.out.print("请输入考生成绩:");
        double grade=s.nextDouble();

        switch((int)(grade/10)) {
            case 9 : case 10 :
                System.out.println("该考生的成绩等级为A");
                break;
            case 8 :
                System.out.println("该考生的成绩等级为B");
                break;
            case 7 :
                System.out.println("该考生的成绩等级为C");
                break;
            case 6 :
                System.out.println("该考生的成绩等级为D");
                break;
            default :
                System.out.println("该考生的成绩等级为E");
        }
    }
}