# java学习记录(流程控制2)

选择结构还有Switch case 语句。

Switch case 语句

Switch case语句也是一种多选择结构,其语法结构为:
swith(表达式A)
{
case(表达式1):{
表达式1==表达式A后执行的语句
}
break;

case(表达式2):{
表达式2==表达式A后执行的语句
}
break;

case(表达式3):{
表达式3==表达式A后执行的语句
}
break;

case(表达式n):{
表达式n=表达式A后执行的语句
}
break;
default:
{
case语句中的表达式没有一个和Switch语句的表达式对应后,执行的语句
}
break;
}
如下:

public class sequence_learning2 {
    public static void main(String[] args) {
        int a = 20;
        switch(a){
            case (100-80):{
                System.out.println("我踏马来啦!");
            }
            break;

            case 30:{
                System.out.println("双料特工!");
            }
            break;

            case 40:{
                System.out.println("你就是歌姬吧!");
            }
            break;

            default:
            {
                System.out.println("大名鼎鼎滴!");
            }



        }
    }
}

由于a=20;所以case中的某个表达式的值,必须要等于20,才能执行与该case对应的代码段。否则就会执行default对应的代码段。
上面的代码中,只有第一个case的表达式的值等于20,即100-80=20,与Switch的表达式的值对应,所以第一个case所对应的代码段:System.out.println(“我踏马来啦!”);
所以最终也会输出 ** 我踏马来啦!** 的结果。
如下图:
在这里插入图片描述
当然,你们会发现我的第一个case语句后面的表达式是写在括号里的,其实这里不加括号也是可以的。
且我的case语句后面所要执行的代码段也是加了大括号的,这个大括号其实也是可以不要的。
如下:
在这里插入图片描述

我这里将表达式的括号()去掉,且将表达式写得更复杂,更长,且还将代码段对应的大括号{}去掉,也依然不影响最终的程序运行。
虽然这里不加括号程序依然可以执行,但是还是建议将括号带上,因为括号将代码在形式上分成了一块一块的单元,这样更容易阅读,也让每一块代码段看上去更加整体。


switch case 语句中,每次执行完一个case,如果没有什么特殊要求,最好在其后面加一个break语句,从而跳出Switch case语句的执行。
否则,在执行完对应的case语句后,如果再此case语句后面还跟着若干个case语句,那么其余case语句,就会因为没有加入break,而依次执行。
这是因为Switch case语句执行时,是跳转到与Switch表达式对应的case的那一行开始执行的,不遇见break,是会一直按顺序执行下去的。
如下:

public class sequence_learning2 {
    public static void main(String[] args) {
        int a = 30;
        switch(a){
            case (100-80):{
                System.out.println("我踏马来啦!");
            }
            break;

            case 30:{
                System.out.println("双料特工!");
            }
            

            case 40:{
                System.out.println("你就是歌姬吧!");
            }
           

            default:
            {
                System.out.println("大名鼎鼎滴!");
            }

        }
    }
}

如上,将第二个case之后的所有break都去掉,当执行第二个case满足条件后,不仅其对应的代码段会被执行,且其之后的所有case对应的代码段都会被执行。
即当 System.out.println(“双料特工!”);输出后,
System.out.println(“你就是歌姬吧!”);和System.out.println(“大名鼎鼎滴!”);
都会被执行。所以最终结果为:
双料特工!
你就是歌姬吧!
大名鼎鼎滴!
如下:
在这里插入图片描述
所以,如果程序没有什么特殊要求,一定要在每一条case语句后面加上break语句,从而跳出Switch case 选择结构。


那么default之后要不要加break呢?
我们做如下实验:

public class sequence_learning2 {
    public static void main(String[] args) {
        int a = 50;
        switch(a){
            case (100-40-10-20-10):
            { System.out.println("我踏马来啦!");

            }
            break;
            
            case 30:{
                System.out.println("双料特工!");
            }
            break;
            
            case 40:{
                System.out.println("你就是歌姬吧!");
            }
            break;
            
            default:
            {
                System.out.println("大名鼎鼎滴!");
            }
        }
    }
}

当default语句在最后一句时,我并没有加break。
当然,default之后的语句,是在没有一个case语句能和Switch的表达式对应上时,才会执行的。
让a=50,从而直接运行default之后的语句,最终结果如下:
在这里插入图片描述

最终就会得到 大名鼎鼎滴! 这个结果。
当然,default的位置是任意的,也可以在中间。如下:

public class sequence_learning2 {
    public static void main(String[] args) {
        int a = 50;
        switch(a){
            case (100-40-10-20-10):
            { System.out.println("我踏马来啦!");

            }
            break;
            default:
            {
                System.out.println("大名鼎鼎滴!");
            }

            case 30:{
                System.out.println("双料特工!");
            }
            break;

            case 40:{
                System.out.println("你就是歌姬吧!");
            }
            break;

           
        }
    }
}

我将default语句放在了中间,没有加break,程序运行结果如下:
在这里插入图片描述
由此可见,虽然default是在 没一个case语句能和Switch的表达式对应上时才会执行,且也不受位置影响,但其依然满足case语句的执行规则。
即没有一个case语句对应上时,就会跳转到default语句,依次执行,除非遇见break语句,或者刚好Switch case语句执行到末尾,才会跳转出Switch case选择结构。
所以当default没有写在 Switch case语句的结尾时,还是需要加上break的。
不过最好还是给结尾的那一条case或者default语句之后都加上break。
方便程序的理解。

最后,我也想说,每个case之后的表达式都不能重复,否则程序会报错。
如下:
在这里插入图片描述

我写了两个case 30:程序就报错了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值