10. 【Java】流程控制之条件判断

发布时间:2026/9/15 6:59:15

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/9/14 7:44:58

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

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

2026/9/15 6:00:15

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

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

2026/9/15 6:56:38

AI编程助手协同配置:Claude+Router+DeepSeek实战

1. 项目背景与核心价值去年在搭建智能开发环境时,我尝试将多个AI编程助手整合到工作流中。经过三个月的迭代测试,最终形成了这套基于Claude Code、Router和DeepSeek的协同配置方案。这种组合最大的优势在于:Claude Code擅长代码补全和语法检查…

2026/9/15 6:56:38

BEVFormer:端到端空间建模的自动驾驶感知范式

1. 为什么BEVFormer不是“又一个Transformer变体”,而是自动驾驶感知范式的分水岭BEVFormer这个词最近在自动驾驶算法圈里几乎成了高频词,但很多人一看到“Former”就下意识归类为“Transformer的又一个分支”,甚至直接跳到代码复现环节——结…

2026/9/15 6:56:38

AI API生产化集成:从选型到可管理的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 6:56:38

金融数据架构革新:从顶层规划到底层落地的系统指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码