switch在java语法结构_Java语法 | switch选择结构 | 创作者训练营

前言

C: 上一篇我们介绍了 if 系列的选择结构语法,整体感受应该是简单易懂且易写的。本篇查老师再介绍一种选择结构语法:switch,但此 switch 非彼 switch。

e4c03ff198d19bdfbdd7dec234d8a891.png

系列阅读

Why?

有了 if ,为什么还要学习使用 switch 选择结构呢?一起来看个案例。

案例需求:小杨参加了创造502节目。如果获得第一名,将会担任《诛仙》女主角

如果获得第二名,将会担任《斗罗大陆》女主角

如果获得第三名,将会担任《永夜》女主角

从需求介绍中可知,案例的条件表达式是简单的等值判断,但是条件很多而且彼此都是互斥的,可以采用多重 if 来实现。// 存储名次int score = 2;// 使用多重ifif(score == 1){

System.out.println("小杨将会担任《诛仙》女主角!");

}else if(score == 2){

System.out.println("小杨将会担任《斗罗大陆》女主角!");

}else if(score == 3){

System.out.println("小杨将会担任《永夜》女主角!");

}复制代码

但相比于范围判断,在等值判断时使用 多重if 有点大材小用,实话就是 if 多了阅读起来真挺费劲的,所以查老师才给大家安利 Java 提供的另一个选择结构语句:switch选择结构。

我们来看看它的语法:switch(表达式){case 常量1:

语句;break;case 常量2:

语句;break;// ....default:

语句;break;

}复制代码

再套用它的语法来解决一下刚才的问题,是不是发现清晰多了?// 存储名次int score = 2;// 使用switchswitch(score){case 1:

System.out.println("小杨将会担任《诛仙》女主角!");break;case 2:

System.out.println("小杨将会担任《斗罗大陆》女主角!");break;case 3:

System.out.println("小杨将会担任《永夜》女主角!");break;

}复制代码

使用注意在满足等值判断的前提下,才可以使用 switch 来进行判断,不可用于范围型判断。

如果没有特殊要求,必须给每一个 case 后追加 break。

break 是表示结束某个 case,如果没有 break,会出现 case 的穿透性,即继续往下执行直到遇到下一个 break 结束!// 存储名次int score = 2;// 使用switchswitch(score){case 1:

System.out.println("小杨将会担任《诛仙》女主角!");case 2:

System.out.println("小杨将会担任《斗罗大陆》女主角!");break;case 3:

System.out.println("小杨将会担任《永夜》女主角!");break;

}复制代码

上方的代码,如果 case 1 后缺少一个 break,那么输出结果是将会是。小杨将会担任《诛仙》女主角!

小杨将会担任《斗罗大陆》女主角!复制代码

建议加上一个 default 来进行默认处理。

switch 的表达式支持的类型有:int、( short、 byte、char 可以自动类型转换为 int),枚举类型(Enum) 、String(自JDK1.7开始,switch 支持了字符串的等值判断,参考官方release介绍)。

f56377bbd8d44281fdf8246c9efba99e.png

268f0d2e087210a9c09be7554a804091.png

switch和if的对比

到此为止,Java 中的选择结构我们就学习完了,别看语法挺多,论派系的话只有两个,一个是 if,一个是switch,而且 switch 和 多重if 也很相像,理解起来也比较容易了。

相同点: 都是用来处理多分支条件的结构。

不同点: switch 只能处理等值条件判断的情况,多重if 选择结构没有 switch 选择结构的限制,特别适合某个变量处于某个连续区间时的情况(范围型判断)。

switch 从效率方面考虑,是要比 if 选择结构执行快(有兴趣自己百度下执行原理),但是随着硬件的发展,这两者之间的效率差距几乎可以忽略不计。查老师有话说: 其实Java近几代版本中对 switch 的优化一直在进行,之所以现在 switch 用的越来越少,其实不见得是不想用,而是当一个程序员接盘别人项目的时候,往往这个项目里已经有很多 if和else 的代码了。

这个时候要是改成 switch 的话,那么不仅达不到自己想要的结果,甚至还会造成框架崩溃,所以为了不做灭霸,接盘程序员就会在后面再加几条 if和else,长久之下,switch 使用率自然不高了!

选择结构综合练习

光看不练假把式,来几个练习,练起来。

模拟登录

使用 if 编写程序:从键盘获取用户名和密码,如果用户名和密码都正确,那么就显示"欢迎进入xxx的世界!",否则就提示"用户名或密码错误!"。提示:可以预先设定一个假的用户名和密码。

1716c9833e5b59f838a0cfa922dc7d0d.png

人机猜拳

从控制台输入要出的拳,1代表石头、2代表剪刀、3代表布,电脑 随机 出拳,比较胜负,完成此代码功能。

a2152e7f679fbc1f85cf653d7ded832d.png

aa79b980e2241a143829f746a710fd25.png

随机数的生成

随机数是我们在程序中经常要使用到的,前期我们可以用它模拟很多业务,下面介绍一个 Java 中生成随机数的玩法。// Math.random()可以随机生成[0.0,1.0)之间的小数// [0.0,1.0)表示一个区间,等价于0.0 <= num1 

* 基于上方的方法,如果想指定生成某个范围内的随机数,可以推导出一个公式。

* 随机数公式为:(int)(Math.random() * (max - min)) + min;

*/// 案例1:生成[0,10)之间的随机整数// [0.0,1.0) * 10 --> [0,10)int num2 = (int)(Math.random() * 10);// 案例2:生成[5,14)之间的随机整数int num3 = (int)(Math.random() * 9) + 5;// 案例3:如果想生成[6,20]之间的随机整数,那可以将其理解为[6,21),这样就可以再套上方的公式了int num4 = (int)(Math.random() * 15) + 6;复制代码

幸运抽奖

实现幸运抽奖功能:输入4位会员号,如果会员号的百位数字等于产生的随机数字,那么这个会员就是幸运会员,将奖励一部 iPhone 11 Pro!进行合理结果提示。提示:获取4位数,各个位的数字举例:int num = 1234;// 千位int qian = num / 1000;// 百位int bai = num / 100 % 10;// 十位int shi = num / 10 % 10;// 个位int ge = num % 10 % 10;复制代码

后记

选择结构出现后,我们就可以把现实生活的业务逻辑,在程序中模拟实现了。这些流程控制语句就像汉语拼音和基本汉字一样基础,好好记忆下语法。

把练习和文章案例实现一下,千万要动手实现!因为理解和熟练掌握是两回事!就好像你在抖音上看了那么多生活上的教程:叠衣服、弹吉他.....,但你从没练过,那永远是学不会的,不要眼高手低。查老师有话说: 对于技术的学习,查老师一贯遵循的步骤是:先用最最简单的 demo 让它跑起来,然后学学它的最最常用 API 和 配置让自己能用起来,最后熟练使用的基础上,在空闲时尝试阅读它的源码让自己能够洞彻它的运行机制,部分问题出现的原因,同时借鉴这些技术实现来提升自己的代码高度。

所以在查老师的文章中,前期基本都是小白文,仅仅穿插很少量的源码研究。当然等小白文更新多了,你们还依然喜欢,后期会不定时专门对部分技术的源码进行解析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值