让代码学会“思考”和“重复”——Java控制结构(循环篇)

发布时间:2026/8/5 23:59:32
让代码学会“思考”和“重复”——Java控制结构(循环篇) 承接上篇顺序、分支篇循环结构应用情景比如当你需要打印 5 次 你好Java 时你可以这样编写public class Main { public static void main(String[] args) { //打印5次 你好Java System.out.println(你好Java); System.out.println(你好Java); System.out.println(你好Java); System.out.println(你好Java); System.out.println(你好Java); } }但是当你需要打印10次、20次甚至上百次时此方法是否还适用显然不行。这时就需要借用循环结构来解决打印次数量较大的情况for(int i 1; i 100; i) { //打印100次 你好Java System.out.println(你好Java); }int i 1; while(i 100) { //打印100次 你好Java System.out.println(你好Java); i; }int i 1; do { //打印100次 你好Java System.out.println(你好Java); i; } while(i 100);基本介绍听其名而知其意就是让你的代码可以循环执行循环结构主要有三种(1). for(2). while(3). do-whilefor 循环、while 循环与 do- while 循环执行流程图for 循环控制基本语法for(循环变量初始化; 循环条件; 循环变量迭代) {循环操作(可多条语句);}执行顺序在每一次循环中先初始化循环变量再判断循环条件是否满足。若满足则执行循环操作最后迭代循环变量并进入下一次循环若不满足则跳出循环for 循环结束可结合上面的执行流程图理解for 循环控制的注意事项和细节说明1. 循环条件是返回一个布尔值的表达式2. for( ; 循环判断条件; ) 中的初始化和变量迭代可以写到其它地方但是两边的分号不能省略int i 1; //循环变量初始化 for( ; i 10; ) { //打印 10 次 hello, java System.out.println(hello, java i); i; } System.out.println(i i); //11注意for( ; ; ) 表示一个死循环无限循环除非有特殊需求,否则不建议使用3. 循环初始值可以有多条初始化语句但要求类型一样并且中间用逗号隔开循环变量迭代也可以有多条变量迭代语句中间用逗号隔开int count 3; for(int i 0, j 0; i count; i, j 2) { System.out.println(i i j j); } /* i 0 j 0 i 1 j 2 i 2 j 4 */练习题1. 打印 1-100 之间所有是 9 的倍数的整数统计个数及总和public class ForExercise01 { //编写一个main方法 public static void main(String[] args) { int i 1; int add 0, count 0; for(i 1; i 100; i) { if(i % 9 0) { System.out.println(i); add i; count; } } System.out.printf(1~100之间所有是9的倍数的整数有 count 个总和为 add); //9 18 27 36 45 54 63 72 81 90 99 //count 11, add 594 } }2. 完成下面的表达式输出0 5 51 4 52 3 53 2 54 1 55 0 5public class ForExercise02 { //编写一个main方法 public static void main(String[] args) { //i 的起始值为 0j 为 5一个加一个减相互对仗 for(int i 0, j 5; i 5; i, j--) { int num i j; System.out.println(i j num); } } }while 循环控制基本语法循环变量初始化while(循环条件) {循环体(语句);循环变量迭代;}执行顺序循环变量在循环外初始化进入 while 循环判断是否满足循环条件。若满足则按顺序先执行循环体后执行循环变量迭代并进入下一循环若不满足则跳出循环whlie 循环结束可结合上面的流程图理解结合基本语法编写打印 10 次 hello, java 程序public class While01 { //编写一个main方法 public static void main(String[] args) { int i 1; //循环变量初始化 while(i 10) { //循环条件 System.out.println(hello, java i); i; //循环变量迭代 } } }while 循环控制的注意事项和细节说明1. 循环条件是返回一个布尔值的表达式2. while 循环是先判断再执行语句练习题1. 打印 1-100 之间所有能被 3 整除的数public class WhileExercise01 { //编写一个main方法 public static void main(String[] args) { int num 1; while(num 100) { if(num % 3 0) { System.out.print(num ); //每个数之间用空格隔开 } num; } } }2. 打印 40-200 之间所有的偶数public class WhileExercise { //编写一个main方法 public static void main(String[] args) { int num 40; while(num 200) { if(num % 2 0) { System.out.print(num ); //每个数之间用空格隔开 } num; } } }注意System.out.println() 与 System.out.print() 的区别前者执行完自动换行后者不换行do-whlie 循环控制基本语法do {循环体(语句);循环变量迭代;} while(循环条件);执行顺序do-while 循环变量与 for, while 不同它遵循的是先执行后判断。即先执行循环体再执行循环变量迭代最后判断循环条件。若满足则进入下一次循环否则跳出循环do-while 循环结束结合基本语法编写打印 10 次 hello, java 程序public class DoWhile01 { //编写一个main方法 public static void main(String[] args) { int i 1; do { System.out.println(hello, java i); //循环执行语句 i; //循环变量迭代 } while(i 10); //循环条件 } }do-while 循环控制的注意事项与细节说明1. 循环条件是返回一个布尔值表达式2. do..while 循环是先执行再判断因此它至少执行一次练习题1. 统计 1-200 之间能被 5 整除但不能被 3 整除的个数public class DoWhileExercise01 { //编写一个main方法 public static void main(String[] args) { int count 0; int j 1; do { if(j % 5 0 j % 3 ! 0) { //能被 5 整除但不能被 3 整除 count; } j; } while(j 200); System.out.println(1-200之间能被5整出但不能被3整除的数有 count 个); } }2. 情景试题妈妈在烤鱼小明问烤好了吗如果妈妈说没烤好小明继续玩游戏如果妈妈说烤好了小明就放下游戏去吃烤鱼提示System.out.println(小明问烤好了吗 y/n);import java.util.Scanner; public class DoWhileExercise02 { //编写一个main方法 public static void main(String[] args) { Scanner scanner new Scanner(System.in); char answer; //小明妈妈的回复 y/n do { System.out.println(小明问烤好了吗 y/n); answer scanner.next().charAt(0); if(answer n) { System.out.println(小明继续玩游戏); } } while(answer ! y); System.out.println(小明放下游戏去吃烤鱼); } }多循环控制介绍1. 将一个循环放在另一个循环体内就形成了嵌套循环。其中for, while, do…while 均可以作为外层循环和内层循环。建议一般使用两层最多不要超过3层否则代码的可读性很差2. 实质上嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时才会完全跳出内层循环才可结束外层的当次循环开始下一次的循环。3. 设外层循环次数为 m 次内层为 n 次则内层循环体实际上需要执行 m * n 次。for(int i 1; i 7; i) { for(int j 1; j 2; j) { System.out.println(ok~); } } //7 * 2 14 总共执行 14 次循环应用案例for(int i 0; i 2; i) { for(int j 0; j 3; j) { System.out.println(i i , j j); } } //外层循环 2 次内层循环 3 次共执行 2 × 3 6 次 /* i 0, j 0 i 0, j 1 i 0, j 2 i 1, j 0 i 1, j 1 i 1, j 2 */嵌套分析外层循环中循环变量 i 初始值为 0小于 2进入内层 for 循环执行循环变量 j 的循环从 0 到 2然后结束内层循环继续执行外层循环i 值变为 1进入内层 for 循环...练习题1. 按要求完成下面的程序(1). 统计3个班成绩情况每个班有5名同学(2). 求出各个班的平均分和所有班级的平均分(3). 统计3个班及格人数每个班有5名同学import java.util.Scanner; public class MulForExercise01 { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int pass_Num 0; // 及格人数 double totalAll 0; // 所有班级的总分 int classNum 3; // 班级个数 int stuNum 5; // 学生个数 for(int i 1; i classNum; i) { double classTotal 0; // 当前班级的总分 for(int j 1; j stuNum; j) { System.out.println(请输入第 i 个班的第 j 个学生的成绩); double score scanner.nextDouble(); if(score 60) { pass_Num; // 统计及格人数 } classTotal score; // 累加当前学生的分数 } // 计算当前班级的平均分 double classAverage classTotal / stuNum; System.out.println(第 i 个班的平均分为 classAverage); totalAll classTotal; // 累加所有班级的总分 } // 计算所有班级的平均分 double last_average totalAll / (classNum * stuNum); System.out.println(所有班级的平均分为 last_average); System.out.println(3个班及格人数为 pass_Num); } }break 语句与 continue 语句执行流程图以 while 使用 break 为例跳转控制语句-break基本介绍break 语句用于终止某个语句块的执行一般是用在 switch 或者循环中基本语法{......break;......}快速入门public class Break01 { //编写一个main方法 public static void main(String[] args) { for(int i 0; i 10; i) { if(i 3) { //当 i 的值为 3 时break 跳出循环后续循环部分不再进行 break; } System.out.println(i i); } } /* i 0 i 1 i 2 */ }代码解读在 for 循环中当 i 的值为 3 时使用 break 跳出整个循环后面的循环部分不再执行break 语句的注意事项和细节说明1. break 语句出现在多层嵌套的语句块中时可以通过标签指明要终止的是哪一层语块2. 标签的基本使用label1: { ...label2: { ...label3: { ...break (label2);...}}}注标签可以自行命名不必要以 label 命名也可以如 abc1, abc2, abc3 等等public class BreakDetail { //编写一个main方法 public static void main(String[] args) { label1: for(int j 0; j 4; j) { label2: for(int i 0; i 10; i) { if(i 2) { //break; //等价 break label2 break label1; //跳出 label1 处的整个循环块 } System.out.println(i i); } } /* i 0 i 1 */ } }练习题1. 1-100 以内的数求和求出当和第一次大于 20 的当前数【for break】public class BreakExercise { //编写一个main方法 public static void main(String[] args) { int add 0; int i 0; for(i 1; ; i) { add i; if(add 20) { //当和大于 20 时跳出循环 break; } } System.out.println(当和第一次大于20的当前数为 i); //6 } }跳转控制语句-continue基本介绍1. continue 语句用于结束本次循环继续执行下一次循环2. continue 语句出现在多层嵌套的循环语句体中时可以通过标签指明要跳过的是哪一层循环规则和 break 标签的使用一样基本语法{ ......continue;......}快速入门public class Continue01 { //编写一个main方法 public static void main(String[] args) { int i 1; while(i 4) { i; if(i 2) { //跳过本次循环继续执行下一次循环 continue; } System.out.println(i i); } /* i 3 i 4 i 5 */ } }代码解读在 while 循环中i 后 i 的值为 2跳过本次循环打印部分 i 值部分跳过直接进入下一次循环continue 的细节案例public class ContinueDetail { //编写一个main方法 public static void main(String[] args) { label1: for(int j 0; j 4; j) { label2: for(int i 0; i 10; i) { if(i 2) { //continue; //等价于 continue label2 continue label1; //跳过 label1 处的本次循环 } System.out.println(i i); } } /* i 0 i 1 i 0 i 1 i 0 i 1 i 0 i 1 */ } }代码解读j 满足的条件的值为 0, 1, 2, 3。跳过 label1内部的 label2 的 for 循环也被跳过故每一次内部循环只打印出 i 0 和 i 1 后就被 continue 跳过总共打印四次跳转控制语句-return介绍return 使用在方法表示跳出所在的方法。注意如果 return 写在 main 方法则表示退出程序在普通方法中则只是返回调用处后续学习方法部分时会详细讲述public class Return01 { //编写一个main方法 public static void main(String[] args) { for(int i 1; i 5; i) { if(i 3) { System.out.println(hello, java i); return; //当 return 用在方法时表示跳出方法如果使用在 main表示退出程序 } System.out.println(Hello World!); } System.out.println(go on..); /* Hello World! Hello World! hello, java3 */ } }代码解读在 for 循环中当 i 1 和 i 2 时不满足 if(i 3)不执行打印 hello, java i执行了两次 Hello World! 的打印当 i 3 满足 if 语句时执行 hello, java i 的打印然后 return由于 return 用在 main 方法中退出了整个程序故程序最后的 go on.. 打印无从执行结语以上就是控制结构相关知识的所有梳理了顺序结构是程序的“直行道”分支结构if - else、switch让程序学会“判断”循环结构for、while、do-while让程序学会“重复”。三者组合几乎可以解决所有业务流程的逻辑问题。控制结构是编程逻辑的基石希望小伙伴们多敲代码、多画流程图把逻辑思维练扎实。在本篇章中习题的整理较少可能不足以满足小伙伴们的学习需求下一篇白弟会专门再整理一些控制结构的相关练习欢迎小伙伴的参考。