> 文档中心 > [JavaSE] java流程控制语句之Switch—Day06

[JavaSE] java流程控制语句之Switch—Day06

目录

 分支语句—— switch

 总结:


 分支语句—— switch

//语法结构:switch(表达式){case 值1:...代码块1...break;case 值2:...代码块2...break;case 值n:...代码块n...break;default:...default代码块...break;}

注意:

表达式的结果:byte、short、char、int、字符串(JDK1.7)、枚举(JDK1.5)
      表达式的结果分别于值1、值2、值n比较,哪个相等执行对应的代码块
      break表示跳出整个switch分支
      default表示表达式的结果分别于值1、值2、值n比较,都不匹配的情况,就执行default代码块
      default代码块根据需求可写可不写

例:

switch(500){case 10:System.out.println("10");break;case 50:System.out.println("50");break;case 100:System.out.println("100");break;default:    System.out.println("default代码块");break;}System.out.println("switch以外的代码");

运行结果:

例子:
       小邓参加计算机编程大赛
                如果获得第一名,将参加公司组织的1个月马尔代夫旅游
                如果获得第二名,将奖励苹果Pro笔记本电脑一部
                如果获得第三名,将奖励移动硬盘一个
                否则,白经理扣小邓同学工资
            

    //1.输入名次    Scanner scan = new Scanner(System.in);    System.out.println("请输入比赛名次:");    String str = scan.next();                     //2.判断      switch(str){          case "第一名":              System.out.println("和白经理一起参加公司组织的1个月马尔代夫旅游");          break;          case "第二名":              System.out.println("奖励苹果Pro笔记本电脑一部");          break;          case "第三名":              System.out.println("奖励移动硬盘一个");          break;          default:              System.out.println("白经理扣小邓工资");          break;                }

运行结果:

 知识点:switch的底层原理
     switch表达式的结果:byte、short、char、int、字符串(JDK1.7)、枚举(JDK1.5)
     底层都是将byte、short、char、字符串(JDK1.7)、枚举(JDK1.5)转换为int类型,再做比较
                    byte   向上转型成 int
                    short  向上转型成 int
                    char   向上转型成 int
                    字符串 获取到字符串的hash值 int
                    枚举   获取枚举类对象里的数值 int
            
知识点:switch的面试题

     case的值可以相同吗?
       不可以,语法错误
     default可以省略吗?
        default类似于if中的else,可以省略
     break可以省略吗?
         可以省略(也不一定)

        注意参考:关于switch中的default里面的break是否可以省略这件事_Vengo€bs的博客-CSDN博客
     default的位置一定要在最后吗?
         不一定,但是考虑到可读性建议在最后
     表达式值的类型可以是什么?
          byte、short、char、int、字符串(JDK1.7)、枚举(JDK1.5)
     case后面值的类型可以是不一样吗?    
          可以,但是要看是否兼容

switch(97){    case 10:System.out.println("10");break;case 50:System.out.println("50");break;case 'a':    System.out.println("a");break;default:System.out.println("default代码块");break;}

运行结果:

例子:
              需求:输入年和月,输出当月的天数
            分析:
                1、3、5、7、8、10、12:31天
                4、6、9、11:30天
                2:平年28天、闰年29天
                年份被4整除且不能被100整除 或者 年份被400整数 为闰年     

                  //1.输入年和月                Scanner scan = new Scanner(System.in);                System.out.println("请输入年:");                int year = scan.nextInt();                System.out.println("请输入月:");                int month = scan.nextInt();                        //2.判断                int day = 0;//当月的天数                switch(month){                    case 1:case 3:case 5:case 7:case 8:case 10:case 12:                        day = 31;                    break;                    case 4:case 6:case 9:case 11:                        day = 30;                    break;                    case 2:                        if(year%4==0 && year%100!=0 || year%400==0){//闰年                            day = 29;                        }else{//平年                            day = 28;                        }                    break;                }                                //3.输出                System.out.println(year + "年" + month + "月当月的天数为:" + day + "天");                

运行结果:

 总结:

if vs switch
            表达式的区别:
                if:表达式只能是boolean
                switch:表达式可以是byte、short、int、char、字符串、枚举
                
            应用场景的区别:
                if:
                    判断区间
                    判断负责条件
                    二选一
                    多选一
                    嵌套
                switch:
                    判断单个值
                    二选一
                    多选一
                    嵌套