购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.3 分支结构之switch-case

switch-case提供多分支程序结构语句。当多分支中的条件表达式是对同一个变量或表达式进行等值判断时,往往使用它代替实现。

4.3.1 分支结构switch-case

switch语句好比是多路开关,如图4-12所示。

img

图4-12 多路开关示例

其语法结构如下所示:

img

switch结构的执行过程是先获取变量或表达式的值,然后从上往下依次匹配各个case后的常量值,判断是否与之相等。如果匹配成功,则执行case后的语句,直到遇见break或switch执行结束为止;如果匹配不成功,则执行default后的语句,直到遇见break或switch执行结束为止。

switch的执行特点有着几个关键词:入口、出口、贯穿。

所谓入口,是指进入switch的某个分支开始执行,它有以下两种情况。

(1)如果switch(变量或表达式)的值与某个case后面的常量值相匹配,那么就从这个case进入。

(2)如果switch(变量或表达式)的值与所有case后面的常量值都不匹配,那么就从default进入。

所谓出口,是指结束switch结构的执行,它有以下两种情况。

(1)如果某个分支执行时遇到了break语句,那么就中断switch的执行。

(2)当遇到switch结构的结束标志“}”时就自动结束。

所谓贯穿,是指一旦找到入口,switch结构可能从一个分支贯穿执行到下一个分支,直到遇到出口为止。无论与case还是与default匹配成功,在遇到break或switch结束大括号前,会一直贯穿向下执行,直到遇到出口为止。

另外,在使用switch结构时,还要注意以下几个事项。

(1)switch( )中的变量或表达式的类型在JDK 5前只能是int类型,或者int类型的兼容类型byte、short、char,在JDK 5后开始支持枚举类型,在JDK 7后开始支持String类型。

示例代码:

img

(2)case后只能是常量值,不能是变量或表达式。

示例代码:

img

(3)case后的常量值不能重复。

示例代码:

img

(4)case语句块中如果没有break,则将贯穿执行下面的case或default中的语句,不再判断是否相等。

案例需求:

比较下面两个代码的输出是否相同。

示例代码1:

img

代码运行结果:

img

示例代码2:

img
img

代码运行结果:

img

案例解析:

在示例代码1中匹配case后,执行对应语句,遇到break时直接跳出,执行结束,得到 x 的结果为105。而在示例代码2中由于每个case语句后都没有声明break,当匹配到case后,执行完对应语句后,将依次往下执行case或default中的语句,直至最后,所以得到 x 的结果为131。

default代表缺省、默认,类似于备选项。default的位置不一定是在case语句的下面,从语法上讲,可以将其调到case上面,但习惯上default在最后。不论default的位置在哪里,执行时依然是先匹配各个case后的常量值是否相等,如果不相等,才会进入default。

案例需求:

以下语句是否正确?如正确,输出结果是多少?

img

案例解析:

编译正确,结果为 x = 126。先判断是否有case可以匹配,找到case 2分支进入,语句中没有break语句,执行顺序会从case 2贯穿到case 3,直到语句的最后。

如果将案例中 a 的值改为4,那么结果又会怎样呢?

4.3.2 分支结构与条件判断的区别

通过前两个小节的学习,相信大家已经对if语句和switch语句有了一定的了解,它们有很多相似之处,那么在具体功能实现和逻辑处理上它们有哪些区别呢?接下来对if语句和switch语句进行详细比较。

(1)if语句和switch语句的比较。

● switch语句只支持常量值相等的分支判断,而if语句的支持更为灵活,任意的布尔表达式均可。

● switch语句通常比一系列嵌套if语句效率更高,逻辑更加清晰。

(2)if语句和switch语句的使用场景。

● switch语句建议用来判断固定值,且此时的固定值的取值范围不大。

● if语句建议用来判断区间或范围。

● switch语句能做的,if都能做,反过来则不行。

4.3.3 案例:判断这一天是当年的第几天

案例需求:

用键盘分别输入年、月、日,判断这一天是当年的第几天。

案例分析:

首先,我们搞清楚每个月分别有几天。

情况1:月份1、3、5、7、8、10、12为31天。

情况2:月份4、6、9、11为30天。

情况3:月份2 需要判断闰年还是平年,闰年为29天,平年为28天。

其次,需要清楚计算这一天是当年的第几天的方法,计算方法可以分为两部分。

第1部分:从1月到month-1月的满月天数。

第2部分:第month月的day天。

示例代码: MXRuMO9OHchqNND97yEb5r2zaJb+h+1zfnCvMYaufuT4YLYVJBpZWeCcfy85GKKy

img
img
点击中间区域
呼出菜单
上一章
目录
下一章
×