Java流程控制详解掌握if、switch、for和while循环文章目录Java流程控制详解掌握if、switch、for和while循环前言一、顺序结构二、选择结构——if语句2.1 单分支if语句2.2 if-else双分支语句2.3 if-else if-else多分支语句2.4 if语句的嵌套2.5 if语句的简化写法三、选择结构——switch语句3.1 基本语法3.2 switch支持的表达式类型3.3 case穿透现象3.4 JDK 14 增强版switch四、循环结构——for循环4.1 基本for循环4.2 for循环的变体4.3 经典for循环练习4.4 增强型for循环for-each五、循环结构——while循环5.1 while循环5.2 do-while循环5.3 循环的选择建议六、循环控制关键字6.1 break——跳出循环6.2 continue——跳过本次循环6.3 带标签的break和continue6.4 死循环与退出七、综合案例——学生成绩管理系统简化版总结✅ 亮点总结适用场景扩展方向前言在程序的世界中代码通常不是按顺序一行行执行的。我们经常需要根据条件做出不同选择或者重复执行某段代码。这就是流程控制要做的事情。Java提供了丰富的流程控制语句主要分为三大类顺序结构、选择结构条件判断和循环结构。本文将带你逐一掌握这些语法并给出大量实际可运行的代码示例。一、顺序结构顺序结构是最基本的程序结构代码按照从上到下的顺序依次执行。如果没有流程控制语句所有程序都是顺序执行的。publicclassSequenceDemo{publicstaticvoidmain(String[]args){System.out.println(第一步打开冰箱门);System.out.println(第二步把大象放进去);System.out.println(第三步关上冰箱门);// 按顺序1→2→3执行}}二、选择结构——if语句2.1 单分支if语句// 语法格式if(条件表达式){// 条件为true时执行的代码块}// 实际示例判断年龄intage20;if(age18){System.out.println(你已经是成年人了);}执行流程先判断条件表达式如果为true就执行花括号内的代码块如果为false就跳过。2.2 if-else双分支语句// 语法格式if(条件表达式){// 条件为true时执行}else{// 条件为false时执行}// 实际示例判断奇偶数intnumber7;if(number%20){System.out.println(number是偶数);}else{System.out.println(number是奇数);}2.3 if-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(不及格);}// 输出良好注意事项多个条件有顺序性一旦某个条件为true后面的条件不再判断else if可以有0到多个else最多一个2.4 if语句的嵌套// 判断闰年能被4整除但不能被100整除或者能被400整除intyear2024;if(year%40){if(year%100!0){System.out.println(year是闰年);}elseif(year%4000){System.out.println(year是闰年);}else{System.out.println(year不是闰年);}}else{System.out.println(year不是闰年);}2.5 if语句的简化写法当代码块只有一行语句时可以省略花括号但不推荐容易引发错误if(score60)System.out.println(及格了);elseSystem.out.println(继续加油);三、选择结构——switch语句3.1 基本语法switch语句用于等值判断的场景比多个if-else if更清晰intday3;StringdayName;switch(day){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);// 今天是星期三3.2 switch支持的表达式类型byte、short、int、char对应的包装类Byte、Short、Integer、CharacterStringJDK 7Enum枚举类型// JDK 7支持String类型Stringseasonspring;switch(season){casespring:System.out.println(春暖花开);break;casesummer:System.out.println(夏日炎炎);break;caseautumn:System.out.println(秋高气爽);break;casewinter:System.out.println(冬日暖阳);break;default:System.out.println(未知季节);break;}3.3 case穿透现象如果没有break程序会一直向下执行到下一个break或switch结束——这被称为穿透intmonth8;switch(month){case6:case7:case8:System.out.println(夏季);break;// 6、7、8都会打印夏季case9:case10:case11:System.out.println(秋季);break;default:System.out.println(其他季节);break;}合理利用穿透可以减少重复代码。3.4 JDK 14 增强版switch从JDK 14开始switch有了箭头语法不需要break也不会穿透intdayNum3;Stringresultswitch(dayNum){case1,2,3,4,5-工作日;case6,7-休息日;default-无效日期;};System.out.println(result);四、循环结构——for循环4.1 基本for循环// 语法格式for(初始化语句;条件判断;条件控制){// 循环体}// 打印1到10for(inti1;i10;i){System.out.println(当前数字i);}执行顺序初始化(只执行一次) → 条件判断(true) → 循环体 → 条件控制 → 条件判断 → …4.2 for循环的变体// 1. 循环变量可以在外面声明inti;for(i0;i5;i){System.out.println(i);}// 2. 条件控制语句可以为空但容易死循环for(intj0;j5;){System.out.println(j);j;// 在循环体内控制}// 3. 多个循环变量for(intm0,n10;mn;m,n--){System.out.println(mm, nn);}4.3 经典for循环练习// 1. 计算1到100的累加和intsum0;for(inti1;i100;i){sumi;}System.out.println(12...100 sum);// 5050// 2. 计算100-999之间的水仙花数// 水仙花数各位数字立方和等于该数本身for(intnum100;num999;num){inthundredsnum/100;inttensnum/10%10;intonesnum%10;if(hundreds*hundreds*hundredstens*tens*tensones*ones*onesnum){System.out.println(水仙花数num);}}// 3. 九九乘法表for(introw1;row9;row){for(intcol1;colrow;col){System.out.print(col×row(col*row)\t);}System.out.println();// 换行}4.4 增强型for循环for-each用于遍历数组或集合语法更简洁int[]scores{85,92,78,95,88};// 普通for循环for(inti0;iscores.length;i){System.out.print(scores[i] );}System.out.println();// 增强for循环推荐用于遍历for(intscore:scores){System.out.print(score );}System.out.println();注意增强for循环无法获取索引如果需要索引还是得用普通for。五、循环结构——while循环5.1 while循环// 语法格式while(条件表达式){// 循环体}// 打印1到10inti1;while(i10){System.out.print(i );i;}使用场景当循环次数不明确只知道循环结束条件时使用while。5.2 do-while循环与while的区别在于无论条件是否满足循环体至少执行一次。// 语法格式do{// 循环体}while(条件表达式);// 示例猜数字游戏框架intsecret7;intguess;do{// 模拟用户输入guess5;// 假设用户猜5System.out.println(你猜的数字是guess);if(guesssecret){System.out.println(猜小了);}elseif(guesssecret){System.out.println(猜大了);}}while(guess!secret);System.out.println(恭喜你猜对了);5.3 循环的选择建议场景推荐使用明确知道循环次数for循环循环次数不明确while循环至少需要执行一次do-while循环遍历数组/集合增强for循环六、循环控制关键字6.1 break——跳出循环// break用于终止当前循环// 示例找到第一个能被3和7同时整除的数for(inti1;i100;i){if(i%30i%70){System.out.println(找到了i);// 21break;// 跳出循环}}6.2 continue——跳过本次循环// continue用于跳过本次循环继续下一次// 示例打印1到20中的偶数for(inti1;i20;i){if(i%2!0){continue;// 奇数就跳过不执行后面的打印}System.out.print(i );}// 输出2 4 6 8 10 12 14 16 18 206.3 带标签的break和continue当有多层嵌套循环时可以使用标签精确控制跳转outer:for(inti1;i3;i){for(intj1;j3;j){if(i2j2){System.out.println(跳出外层循环);breakouter;// 跳出外层循环}System.out.println(ii, jj);}}System.out.println(双重循环结束);6.4 死循环与退出// 死循环条件永远为truewhile(true){System.out.println(这是一个死循环);// 必须用break退出否则程序不会停止break;}// 经典的死循环写法for(;;){// 某些特殊场景需要使用break;}七、综合案例——学生成绩管理系统简化版publicclassScoreManagement{publicstaticvoidmain(String[]args){// 学生成绩数据int[]scores{89,76,95,68,82,78,91,88,73,95};// 统计各等级人数intexcellent0,good0,average0,poor0;intsum0,maxscores[0],minscores[0];for(intscore:scores){// 累计总分sumscore;// 找最大值和最小值if(scoremax)maxscore;if(scoremin)minscore;// 统计等级if(score90){excellent;}elseif(score80){good;}elseif(score60){average;}else{poor;}}doubleavg(double)sum/scores.length;System.out.println( 成绩统计报告 );System.out.println(平均分String.format(%.1f,avg));System.out.println(最高分max);System.out.println(最低分min);System.out.println(优秀(≥90)excellent人);System.out.println(良好(≥80)good人);System.out.println(中等(≥60)average人);System.out.println(不及格(60)poor人);// 判断整体情况if(avg80poor0){System.out.println(整体情况优秀);}elseif(avg60){System.out.println(整体情况良好);}else{System.out.println(整体情况需要加强);}}}总结本文详细讲解了Java流程控制的三大结构顺序结构代码按书写顺序从上到下执行选择结构if/if-else/if-else if-else用于范围判断switch用于等值判断注意break防穿透循环结构for适合次数明确的循环while适合条件控制do-while至少执行一次增强for用于遍历控制关键字break终止循环continue跳过本次标签可控制多层循环流程控制是编程的核心逻辑熟练掌握这些语法后你就可以写出有智能的程序了。下一篇文章我们将学习Java数组的使用。✅ 亮点总结if与switch的选择对比if-else适合范围判断如成绩等级switch适合等值匹配如星期几各有最佳使用场景switch穿透机制详解break缺失导致的穿透效应既有风险也有妙用多个case合并时故意省略break更简洁三种循环的本质区别for已知循环次数、while条件驱动、do-while先执行后判断各自适用不同场景标签控制多层循环带标签的break和continue可以一次性跳出多层嵌套循环避免设置额外标志位成绩统计综合案例结合数组遍历、if-else分支、最大值查找等多知识点完整呈现流程控制在数据处理中的应用适用场景实现业务规则引擎如根据订单金额、用户等级计算折扣大量使用if-else if分支判断处理批量数据统计如遍历学生成绩数组同时计算最高分、最低分、平均分和各等级人数编写菜单驱动的控制台程序外层while死循环配合内层switch实现交互式功能选择扩展方向数组操作学完流程控制后处理批量数据推荐阅读 04_Java数组操作全解递归算法用递归替代循环解决汉诺塔、斐波那契数列等问题理解递归与迭代的优劣Stream函数式编程在后续学习中用filter、map、reduce等链式操作替代传统循环代码更简洁