Java基础快速入门: 条件控制

发布时间:2026/6/23 13:17:47
Java基础快速入门: 条件控制 本文纲要流程控制语句概述顺序结构if 语句格式一单分支判断if 语句格式二双分支 if-elseif 语句格式三多分支 if-else if-else案例考试奖励if 嵌套switch 语句基本格式与执行流程default 的作用与建议注意事项案例减肥计划case 穿透现象与应用总结流程控制语句概述在 Java 中程序默认是按照代码的先后顺序从上到下依次执行的但实际业务往往需要根据条件选择不同分支或重复执行某些操作。流程控制语句就是用来控制程序执行方向的结构主要分为顺序结构、分支结构和循环结构三大类。其中分支结构又包括 if 系列语句和 switch 语句。顺序结构顺序结构是 Java 程序默认的执行流程代码按照编写的先后顺序从上到下、从左到右依次执行没有特定的语法结构。任何 Java 程序都是从 main 方法的第一条语句开始逐行向下运行直到方法结束。即使程序被重复执行多次执行顺序也不会发生变化。下面是一个简单的顺序结构示例publicclassDemo1{publicstaticvoidmain(String[]args){System.out.println(1);System.out.println(2);System.out.println(3);System.out.println(4);System.out.println(5);}}无论运行多少次控制台都会严格按照 1、2、3、4、5 的顺序输出。if 语句格式一单分支判断if 语句的第一种格式是最基础的条件判断对应中文中的“如果……就……”。其结构为 if (关系表达式) { 语句体; }。程序会先计算关系表达式的结果若结果为 true 则执行大括号中的语句体若结果为 false 则跳过语句体直接执行 if 之后的其他代码。publicclassDemo1If{publicstaticvoidmain(String[]args){System.out.println(开始);intage17;if(age18){System.out.println(可以上网吧);}System.out.println(结束);}}注意事项如果 if 控制的语句体只有一条语句大括号可以省略但强烈不建议这样做因为容易在修改代码时引入错误例如定义变量会被编译器视为两条语句。if 的小括号后面不要加分号否则会把 if 和后面的语句体割裂开导致条件不生效。if 语句格式二双分支 if-elseif-else 格式对应“如果……否则……”结构为 if (关系表达式) { 语句体1; } else { 语句体2; }。程序先计算关系表达式结果为 true 时执行语句体1为 false 时执行语句体2两个语句体互斥只会执行其中一个。publicclassDemo2If{publicstaticvoidmain(String[]args){intnum9;if(num%20){System.out.println(偶数);}else{System.out.println(奇数);}}}这段代码通过取模运算判断一个数是奇数还是偶数num 对 2 取余为 0 则打印偶数否则打印奇数。if 语句格式三多分支 if-else if-else当需要判断多个条件时使用 if-else if-else 结构格式为多层 if (判断条件1) { … } else if (判断条件2) { … } … else { … }。程序从上到下依次检查每一个判断条件一旦某个条件为 true就执行对应的语句体并结束整个 if 结构如果所有条件都不满足则执行最后的 else 代码块。publicclassDemo3If{publicstaticvoidmain(String[]args){intscore-1;if(score90score100){System.out.println(优秀);}elseif(score80score89){System.out.println(良好);}elseif(score70score79){System.out.println(中等);}elseif(score60score69){System.out.println(及格);}elseif(score0score59){System.out.println(请努力加油);}else{System.out.println(成绩有误!);}}}该示例根据学生成绩给出评价并利用最后的 else 捕获不在 0~100 范围内的错误输入。else 即使省略也不会报错但加上它可以提供友好的错误提示因此建议保留。案例考试奖励if 嵌套实际开发中经常需要在一个 if 或 else 代码块内部继续编写 if 语句即 if 的嵌套。下面以一个根据成绩发放不同奖励的案例来演示importjava.util.Scanner;publicclassTest{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);System.out.println(请输入您的成绩:);intscoresc.nextInt();if(score0score100){if(score95score100){System.out.println(自行车一辆);}elseif(score90score94){System.out.println(游乐场一次);}elseif(score80score89){System.out.println(变形金刚一个);}else{System.out.println(挨顿揍, 这座城市又多了一个伤心的人~);}}else{System.out.println(您的成绩输入有误!);}}}程序首先通过 Scanner 获取学生成绩然后使用外层 if-else 判断成绩是否在合法范围 0~100 之间。如果合法再通过内层的 if-else if-else 判断具体分数段并给出对应奖励如果非法则直接提示输入错误。这种 if 嵌套写法可以让逻辑层次清晰便于维护。switch 语句1 ) 基本格式与执行流程switch 语句也是一种多分支选择结构适合处理值匹配的场景。其基本格式为switch(表达式){case值1:语句体1;break;case值2:语句体2;break;...default:语句体n1;break;}表达式可以是 byte、short、int、charJDK5 之后支持枚举JDK7 之后支持 String执行时先计算表达式的值然后从上到下依次与每个 case 后面的常量值进行匹配匹配成功则执行对应语句体遇到 break 跳出整个 switch如果所有 case 都不匹配则执行 default 块中的语句体2 ) default 的作用与建议default 类似于 if-else 中的最后 else用来处理所有 case 都无法匹配的情况default 可以省略不写但强烈建议保留以便对范围外的值给出友好提示注意事项case 后面的值不允许重复否则编译器直接报错case 后面的值必须是常量不能是变量3 ) 案例减肥计划① 需求背景现代人越来越注重健康管理许多人会制定一周的运动计划不同日子安排不同的锻炼项目。例如周一跑步、周二游泳、周三慢走、周四动感单车、周五爬山、周六拳击、周日好好吃一顿犒劳自己。我们希望编写一个程序用户输入 1~7 之间的整数代表星期几程序就能自动显示当天的推荐运动。② 实现分析使用 Scanner 从键盘读取一个整数表示星期数。将该整数作为 switch 表达式的匹配值。使用 case 1 到 case 7 分别对应星期一至星期日的运动安排。每个 case 内部输出对应的运动名称然后用 break 结束 switch。增加 default 分支处理输入不在 1~7 范围的情况给出“输入有误”的提示。③ 完整代码importjava.util.Scanner;publicclassWeightLossPlan{publicstaticvoidmain(String[]args){// 第一步键盘录入星期数据ScannerscnewScanner(System.in);System.out.println(请输入星期数1-7);intweeksc.nextInt();// 第二步使用 switch 匹配并输出减肥计划switch(week){case1:System.out.println(跑步);break;case2:System.out.println(游泳);break;case3:System.out.println(慢走);break;case4:System.out.println(动感单车);break;case5:System.out.println(爬山);break;case6:System.out.println(拳击);break;case7:System.out.println(好好吃一顿);break;default:System.out.println(您的输入有误请输入1~7之间的整数);break;}}}执行流程说明当用户输入 3 时week 的值为 3switch 从上到下匹配case 1、2 不匹配case 3 匹配成功执行 System.out.println(“慢走”)然后遇到 break 跳出 switch程序结束当用户输入 8 时所有 case 都不匹配执行 default 分支输出错误提示4 case 穿透现象与应用① 什么是 case 穿透在 switch 语句中如果某个 case 分支的代码块中没有编写 break 语句程序在执行完该 case 的代码后并不会自动跳出 switch 结构而是会继续执行下一个 case 分支的代码无论下一个 case 的值是否与表达式匹配。这种现象被称为 case 穿透。穿透会一直持续下去直到遇到 break 语句或整个 switch 执行完毕才会停止。通过一个错误示例来直观感受穿透现象publicclassSwitchDemo{{publicstaticvoidmain(String[]args){{charexpressionb;switch(expression){{casea:System.out.println(A);break;caseb:System.out.println(B);// 注意这里故意没有写 breakcasec:System.out.println(C);cased:System.out.println(D);}}}}}}运行后控制台输出 B、C、D。因为表达式匹配到 case ‘b’ 后打印了 B但由于缺少 break程序继续向下穿透依次执行了 case ‘c’ 和 case ‘d’ 的打印语句。② 利用 case 穿透合并分支虽然忘记 break 常常导致意外的错误但合理利用穿透反而能让代码更简洁。当多个 case 需要执行相同的逻辑时可以通过省略 break 把这些 case 合并在一起避免重复编写相同的语句体。需求键盘录入星期数1 到 5 输出“工作日”6 或 7 输出“休息日”其他数字提示输入有误。importjava.util.Scanner;publicclassSwitchDemo{{publicstaticvoidmain(String[]args){{ScannerscnewScanner(System.in);System.out.println(请输入星期数:);intweeksc.nextInt();switch(week){{case1:case2:case3:case4:case5:System.out.println(工作日);break;case6:case7:System.out.println(休息日);break;default:System.out.println(您的输入有误);break;}}}}}}当 week 的值为 1 时程序匹配到 case 1 但后面没有语句也没有 break于是穿透到 case 2依次向下直到 case 5执行“工作日”的打印语句后遇到 break 结束。这种写法把周一至周五这五个分支合并到了一起省去了重复代码。③ 再举一个判断元音字母的例子publicclassTestVowel{{publicstaticvoidmain(String[]args){{// 随机生成 a~z 之间的一个小写字母charc(char)(Math.random()*26a);switch(c){{casea:casee:casei:caseo:caseu:System.out.println(c 是元音字母);break;default:System.out.println(c 不是元音字母);break;}}}}}}程序随机生成一个字母利用 case 穿透将 a、e、i、o、u 五个分支合并只要满足任意一个元音字母就打印对应信息非常简洁。④ case 穿透的实际意义合理使用 case 穿透可以达到以下效果一是减少重复代码提高代码的简洁性二是清晰表达多个条件对应同一结果的业务逻辑增强代码的可读性。但需要特别注意穿透必须是有意为之应在相关 case 附近做好注释说明避免后期维护人员误认为是遗漏了 break。总结switch 语句是 Java 中常用的多分支选择结构适用于对离散值进行等值匹配的场景。其核心要点总结如下格式组成由 switch(表达式)、case 常量值、语句体、break 和可选的 default 构成。表达式类型支持 byte、short、int、char、枚举(JDK5)以及 String(JDK7)。执行流程计算表达式值从上到下依次与 case 常量匹配匹配成功则执行对应语句体遇到 break 跳出整个 switch。default 分支所有 case 都不匹配时执行虽然可以省略但建议保留以处理非法输入。case 穿透省略 break 会导致匹配成功后继续执行后续 case 的代码。可利用这一特性将多个分支合并减少重复代码但必须有意识地使用并在代码中做好说明。掌握好 switch 语句及其穿透特性能够让我们在面对多分支数值匹配问题时编写出更加简洁、优雅的代码。

月新闻