当前位置: 首页 > news >正文

【日撸 Java 三百行】Day 5(Switch语句)

目录

Day 5:Switch 语句的基本使用方法

一、基础知识及案例分析

二、代码及测试

拓展:流程控制语句专题补充

小结


Day 5:Switch 语句的基本使用方法

Task:

  • Switch, case, break, default 的用法.
  • 单元测试单独使用一个方法, main 方法里面的代码越少越好.

一、基础知识及案例分析

1. 关于 Switch 语句
        switch 语句是多分支语句的开关,本质上可以认为是多个 if-else 叠合在一起的共同判断端。相比于if-else if-else更复杂的重叠与非重叠条件,switch可以实现单个信息的多段区分判断,换言之,若我们需要判断的数据是单一变量的值域在多个分段的区分问题(而且这种分段比较多),那么switch要比if-else if-else来得更加直观。

2. 案例分析
        关于 switch 语句的一个经典案例就是评级系统,这个案例可直观体现switch的特性。因为分数评级符合单一变量原则、多段原则(评级ABCD…)、分段多原则(就具百分制来看)、而且方便在每个段进行量化(离散化)。
        下图可以很好的说明这个系统的特性。

3. 逻辑判断
        从上图可以发现,评级系统本质上是分数与等级的映射关系。结合 switch 的判断原理我们知道,这个映射关系实际上是建立在对分数十位和百位的数值判断。故可以在 switch 语句中进行如下判断:

	public static char scoreToLevel(int paraScore) {// E stands for error, and F stand for fail.char resultLevel = 'E';// Divide by 10, the result ranges from 0 to 10int tempDigitalLevel = paraScore / 10;// The use of break is important.switch (tempDigitalLevel) {case 10:case 9:resultLevel = 'A';break;case 8:resultLevel = 'B';break;case 7:resultLevel = 'C';break;case 6:resultLevel = 'D';break;case 5:case 4:case 3:case 2:case 1:case 0:resultLevel = 'F';break;default:resultLevel = 'E';}// Of switchreturn resultLevel;}// Of scoreToLevel

        这里有个额外注意的点是,:

switch语句的每一个 case 判断,在一般情况下都有break语句,以指明这个分支执行完成后,就跳出该 switch语句。在某些特定的场合下可能不需要 break语句,如在若干判断值共享同一个分支时,就可以实现由不同的判断语句流入相同的分支。

二、代码及测试

代码如下:

package basic;/*** The usage of sth.** @author: Changyang Hu joe03@foxmail.com* @date created: 2025-05-08*/public class SwitchStatement {/************************ The entrance of the program.* * @param args Not used now.**********************/public static void main(String args[]) {scoreToLevelTest();}// Of main/************************ Score to level.* * @param paraScore From 0 to 100.* @return The level from A to F.**********************/public static char scoreToLevel(int paraScore) {// E stands for error, and F stand for fail.char resultLevel = 'E';// Divide by 10, the result ranges from 0 to 10int tempDigitalLevel = paraScore / 10;// The use of break is important.switch (tempDigitalLevel) {case 10:case 9:resultLevel = 'A';break;case 8:resultLevel = 'B';break;case 7:resultLevel = 'C';break;case 6:resultLevel = 'D';break;case 5:case 4:case 3:case 2:case 1:case 0:resultLevel = 'F';break;default:resultLevel = 'E';}// Of switchreturn resultLevel;}// Of scoreToLevelpublic static void scoreToLevelTest() {int tempScore = 100;System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore));tempScore = 91;System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore));tempScore = 82;System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore));tempScore = 75;System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore));tempScore = 66;System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore));tempScore = 52;System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore));tempScore = 8;System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore));tempScore = 120;System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore));}// Of scoreToLeveTest
}// Of class

        基于测试的要求,数据应该尽可能覆盖每一个 case,运行结果如下:

拓展:流程控制语句专题补充

待补充


小结

        在当今的计算机中,switch 语句和 if 语句的速度/效率差距已经可以忽略不计,更多的时候我们考量的是 “谁能够更加清晰的表达逻辑关系”,以增强程序的可读性以及逻辑性。

        而这就需要对于问题作出合理分析并且做出正确的模拟,这种能力需要再日常的编程过程中锻炼,以积累足够的经验来辅助自己判断。

http://www.xdnf.cn/news/348967.html

相关文章:

  • SOA 与微服务架构深度比较
  • 【C语言】(8)—指针2
  • chrome插件提取标签数据
  • Python cv2对象检测与跟踪:从基础到进阶实战
  • Java JWT 配置类 (JwtProperties) 学习笔记
  • el-table计算表头列宽,不换行显示
  • C++模板笔记
  • 使用DEEPSEEK快速修改QT创建的GUI
  • 【日撸 Java 三百行】Day 6(For语句)
  • Cursor降智找不到文件(Cursor降智)
  • C++漫步结构与平衡的殿堂:AVL树
  • SpringBoot应急知识学习系统开发实现
  • [计算机科学#10]:早期的计算机编程方式
  • 基于php人力劳务招聘系统开发功能需求分析【源码】
  • 千星计划小程序开发方案
  • SpringAI实现AI应用-自定义顾问(Advisor)
  • 基金从入门到荒废-基金的分类
  • #define ccw (0)和#define ccw 0什么区别
  • 数据结构 - 8( AVL 树和红黑树 10000 字详解 )
  • Python序列Day3
  • 【软件设计师:操作系统】5.操作系统基础与进程
  • FPGA图像处理(四)------ 图像裁剪
  • 5月8号.
  • MySQL事务隔离机制与并发控制策略
  • 电子电路原理第十五章(运算放大器)
  • 新手SEO基础优化步骤
  • conda创建一个新环境,指定环境的存储位置,而不是默认值地址
  • 操作系统 : Linux进程信号
  • 【LeetCode 热题 100】二叉树 系列
  • 基于GlusterFS的分布式存储集群部署实战指