发布时间:2026/7/15 5:34:26
10. 【Java】流程控制之条件判断 摘要本文详细讲解了if、if-else、if-else if-else、嵌套if、switch语句包括 JDK 21 新语法以及三元运算符的用法与适用场景。通过一个完整的“成绩等级判断器”实战案例帮助初学者理解如何让程序根据不同条件执行不同分支并提供了结构选择建议与常见陷阱提示为后续学习循环打下坚实基础。关键词Java 条件判断, if-else 语句, switch 语句, 三元运算符, JDK 21前面几篇文章我们学习了数据变量、常量和运算运算符。但程序如果只会从上到下、一条接一条地执行语句那它就像一条笔直的马路——只能往前走遇到岔路也不会拐弯。但现实中的程序每天都在“做决策”如果用户输入了正确的密码就登录成功如果余额不足就提示充值如果今天是周末就显示“休息日”……这些“如果……就……”的逻辑就是今天我们要讲的条件判断。Java 提供了三种主要的条件判断结构if/else语句最常用适用于各种条件分支。switch语句适合对一个变量的多个离散值进行匹配。三元运算符? :一种简洁的“二选一”表达式。我们来逐一认识它们。1.if语句 —— 最基本的“如果…就…”if语句的语法非常直观if(条件){// 条件为 true 时执行的代码}条件必须是一个布尔表达式结果是true或false。如果条件为true就执行花括号里的代码否则跳过。intage20;if(age18){System.out.println(你已经成年了。);}// 程序继续向下执行如果只有一个语句花括号可以省略但不建议容易出错if(age18)System.out.println(成年了);// 不推荐2.if-else—— “如果…就…否则…”更常见的场景是二选一条件成立做 A否则做 B。if(条件){// 条件为 true 时执行}else{// 条件为 false 时执行}intscore65;if(score60){System.out.println(及格了);}else{System.out.println(不及格继续加油。);}3.if-else if-else—— 多重分支如果不止两个分支可以用else if串联起来if(条件1){// 条件1为 true}elseif(条件2){// 条件1为 false条件2为 true}elseif(条件3){// 条件1、2均为 false条件3为 true}else{// 所有条件均为 false}注意else if可以有多个else是可选的且最多一个放在最后表示“其他所有情况”。intscore85;if(score90){System.out.println(优秀);}elseif(score80){System.out.println(良好);}elseif(score70){System.out.println(中等);}elseif(score60){System.out.println(及格);}else{System.out.println(不及格);}这里有个重要的细节条件的顺序很关键。如果先把 60放在前面那么 90也会匹配 60就不会再往后判断了。所以通常把最严格的条件写在最前面。4. 嵌套if—— 条件中的条件在if或else的代码块内部还可以再写if语句这就是嵌套。嵌套可以让逻辑更精细但嵌套层数不宜过多一般不超过 3 层否则代码会变得难以阅读。可以考虑用逻辑运算符、||来简化。intage22;booleanhasIDtrue;if(age18){if(hasID){System.out.println(欢迎进入网吧。);}else{System.out.println(请出示身份证。);}}else{System.out.println(未成年人禁止入内。);}上面的代码可以改写成更简洁的形式if(age18hasID){System.out.println(欢迎进入网吧。);}elseif(age18!hasID){System.out.println(请出示身份证。);}else{System.out.println(未成年人禁止入内。);}哪种写法更好取决于具体场景。嵌套适合表达“层层递进”的检查而逻辑组合适合简单的并列条件。5.switch语句 —— 多路匹配的“开关”switch适用于一个变量等于多个固定值之一的情况。它比一连串的if-else if更清晰、更高效。传统switch的语法JDK 14 之前switch(变量){case值1:// 变量 值1 时执行break;case值2:// 变量 值2 时执行break;// ... 可以有多个 casedefault:// 所有 case 都不匹配时执行break;}break很关键如果某个 case 匹配后没有break程序会继续执行下一个 case 的代码这叫“穿透”直到遇到break或switch结束。这个特性有时故意使用但更多时候是 bug 的来源所以不要忘记写break。intdayOfWeek3;// 假设1周一7周日StringdayName;switch(dayOfWeek){case1:dayName星期一;break;case2:dayName星期二;break;case3:dayName星期三;break;case4:dayName星期四;break;case5:dayName星期五;break;case6:dayName星期六;break;case7:dayName星期日;break;default:dayName无效的星期;break;}System.out.println(dayName);// 星期三JDK 21 的switch增强很重要从 Java 14 开始switch得到了重大增强可以当作表达式使用并且支持-语法不再需要break。JDK 21 又进一步引入了模式匹配预览特性让switch变得更加强大。我们先看最实用的switch表达式intdayOfWeek3;StringdayNameswitch(dayOfWeek){case1-星期一;case2-星期二;case3-星期三;case4-星期四;case5-星期五;case6-星期六;case7-星期日;default-无效的星期;};System.out.println(dayName);看到区别了吗用-代替了:和break每个分支直接返回一个值。switch整体变成了一个表达式可以把结果赋值给变量。更简洁且不会发生“穿透”。如果需要在一个分支中执行多条语句可以使用花括号并用yield返回值关键字yield是专门为switch表达式引入的intscore85;Stringgradeswitch(score/10){case9,10-优秀;// 多个值可以并列case8-{System.out.println(良好级别);yield良好;// yield 返回这个分支的值}case7-中等;case6-及格;default-不及格;};System.out.println(grade);在 JDK 21 中switch还支持模式匹配预览特性可以匹配类型、null等但这是进阶内容我们会在第五阶段深入讲解。初学阶段掌握-和表达式用法就足够了。建议从现在开始尽量使用新式的switch语法-和表达式它更安全、更简洁。6. 三元运算符 —— “二选一”的快捷方式有时候我们只需要根据一个条件从两个值中选一个赋值给变量。这种简单的“if-else”可以用三元运算符? :来简化。语法变量条件?值1:值2;如果条件为true取值1否则取值2。intage20;Stringstatus(age18)?成年:未成年;System.out.println(status);// 成年它等价于Stringstatus;if(age18){status成年;}else{status未成年;}三元运算符很简洁但不要过度嵌套否则可读性会急剧下降。比如a ? b : c ? d : e这种写法就很不推荐。7. 实战一个简单的“成绩等级判断器”让我们把今天学到的内容综合起来写一个交互式小工具从用户输入分数然后输出等级。packagecom.example.demo;importjava.util.Scanner;/** * 演示条件判断if-else if 和 switch 表达式 * 功能根据用户输入的分数输出对应的等级 */publicclassGradeEvaluator{publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);System.out.print(请输入你的分数0-100);intscorescanner.nextInt();// 1. 使用 if-else if 进行范围判断Stringgrade1;if(score0||score100){grade1无效分数;}elseif(score90){grade1优秀;}elseif(score80){grade1良好;}elseif(score70){grade1中等;}elseif(score60){grade1及格;}else{grade1不及格;}System.out.println(if-else 方式grade1);// 2. 使用 switch 表达式利用整数除法将分数区间映射到 0~10// 注意这里我们只处理 0~100 的正常分数异常情况用三元单独处理Stringgrade2(score0||score100)?无效分数:switch(score/10){case9,10-优秀;case8-良好;case7-中等;case6-及格;default-不及格;};System.out.println(switch 表达式方式grade2);// 3. 额外用 switch 判断等级对应的简短评语Stringcommentswitch(grade1){case优秀-太棒了继续保持;case良好-不错再接再厉;case中等-还可以多花点时间。;case及格-刚过线要加把劲;case不及格-别灰心找找原因重新出发;default-输入有误;};System.out.println(评语comment);scanner.close();}}运行它输入不同的分数观察输出。你会发现if-else和switch各有所长范围判断用if-else离散值匹配用switch。8. 选择哪种结构场景推荐方式条件是一个范围如分数 60if-else if条件是一个布尔表达式组合if-else 逻辑运算符条件变量是整数、字符、字符串或枚举且只有有限个固定值switch新语法更佳简单的二选一赋值三元运算符但别滥用9. 常见陷阱漏掉break旧语法导致“穿透”除非你故意利用否则都是 bug。switch表达式必须覆盖所有可能值要么有default要么所有 case 都覆盖。否则编译错误。条件顺序错误把更宽松的条件写在前面导致更严格的条件永远不会执行。浮点数比较不要用直接判断浮点数应该用范围或阈值。今天的总结今天我们学习了程序的“决策”能力if-else if-else最灵活适合范围、组合条件。switch适合离散值匹配推荐使用 JDK 21 的-表达式语法。三元运算符? :简洁的“二选一”。你已经可以让程序根据不同情况做出不同反应了。下一篇我们要讲循环——让程序重复做某件事直到满足条件为止。这是编程中另一个核心的控制结构。动手试试写一段代码从用户输入一个年份判断它是不是闰年条件能被 4 整除但不能被 100 整除或者能被 400 整除。用if-else实现。用switch表达式改写上面的星期判断要求使用-语法并处理无效输入。写一个简单的“计算器”程序提示用户输入两个数字和一个运算符、-、*、/然后输出运算结果。用switch来匹配运算符处理除数为 0 的情况。慢慢来多练习。掌握条件判断后你的程序就不再是一条直线了——它有了“灵魂”。我们下一篇见。 获取本系列示例代码请访问 GitCode。

相关新闻

2026/7/15 5:29:26

C语言集成WebAssembly实战:7步打通浏览器高性能计算

1. 项目概述:为什么C语言开发者必须拥抱WebAssembly?如果你是一名C语言开发者,无论是深耕嵌入式、系统编程,还是高性能计算,最近几年一定频繁听到一个词:WebAssembly(简称Wasm)。你可…

2026/7/15 5:29:26

C++ GUI开发实战:从零构建跨平台桌面应用

1. 项目概述:为什么要在C里折腾GUI? 如果你是一个C开发者,尤其是从后端、系统或者游戏引擎领域过来的,第一次听到“用C写GUI”这个需求,大概率会眉头一皱。毕竟,Python有PyQt/PySide、Tkinter,…

2026/7/15 6:29:31

吉林大学期末复习实战指南:从学长笔记到真题演练(2024版)

1. 期末复习资源高效获取指南作为吉大学子,每到期末最头疼的就是如何在短时间内掌握大量知识点。经过三个学期的摸爬滚打,我发现学长笔记真题演练的组合拳是最有效的复习方式。先说几个我亲测好用的资源获取渠道:CSDN和博客园是宝藏平台&…

2026/7/15 6:29:31

JBT62轴流风机结构设计实战:从参数计算到部件选型

1. JBT62轴流风机设计基础:参数计算与工况分析第一次接触JBT62轴流风机设计时,我被各种专业术语搞得头晕眼花。直到在车间跟老师傅拆解了一台故障风机,才真正理解参数计算的意义——它们就像风机的"体检报告",每个数字都…

2026/7/15 6:29:31

AM574x串行通信接口深度解析:时序、硬件设计与驱动实战

1. 项目概述:为什么需要深入理解AM574x的串行通信接口?在嵌入式系统开发中,处理器与外设的“对话”能力是项目成败的关键。这种对话,绝大多数时候依赖于串行通信接口。无论是读取一个温湿度传感器的数据,还是向一块显示…

2026/7/15 6:29:31

深入解析TMS320C6654 DSP设备配置与状态控制寄存器

1. 项目概述:为什么需要深入理解C6654的设备配置?在嵌入式系统开发,尤其是基于德州仪器(TI)TMS320C66x系列高性能DSP的项目中,我们常常会听到一个词:“一上电就跑飞了”。这背后十有八九&#x…

2026/7/15 6:29:31

百元主动降噪耳机技术解析:熙彼儿WF200实测与选购指南

在百元价位寻找一款真正具备主动降噪功能的耳机,往往需要在降噪效果、音质表现、续航能力和佩戴舒适度之间做出权衡。熙彼儿WF200作为这个价位段的新品,宣称在多个维度都有不错的表现,但实际体验是否真如宣传所说,还需要从技术参数…

2026/7/15 6:24:31

电力电子死区时间测量与优化:从原理到实战应用

在电力电子设计中,死区时间是一个直接影响系统效率和可靠性的关键参数。无论是MOSFET、IGBT模块还是SiC碳化硅器件,不当的死区设置都会导致桥臂直通、开关损耗增加甚至器件损坏。这次我们直接切入实战,讲解功率管死区时间的测量方法和计算逻辑…

2026/7/14 12:47:32

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/14 19:23:19

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/14 18:30:06

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/15 0:08:29

【LINUX】驱动

【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】

2026/7/15 0:08:29

【1982-2026】全国高精度建筑轮廓|村级精度|SHP矢量

🔍 数据简介 本次分享1982-2026年全国村级精度建筑轮廓矢量数据,覆盖全国各省市区县,到村级别精细,为2026年最新实时采集成果,非网传仅60/77个城市的老旧数据。 数据含带高度/不带高度双版本,单体建筑边界精…

2026/7/15 0:08:29

【1975-2026】全国水系水路数据|河流/水库/运河|SHP矢量

🔍 数据简介 本次分享1975-2026年全国高精度水系水路矢量数据,覆盖全国全域,包含河流、水系、水库、运河、湿地、冰川、沟渠等全类别水文要素。 数据集包含双层矢量图层,字段分类清晰、要素齐全,支持2013-2026逐年完整…

2026/7/14 12:47:31

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…