让代码学会“思考”和“重复”——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让程序学会“重复”。三者组合几乎可以解决所有业务流程的逻辑问题。控制结构是编程逻辑的基石希望小伙伴们多敲代码、多画流程图把逻辑思维练扎实。在本篇章中习题的整理较少可能不足以满足小伙伴们的学习需求下一篇白弟会专门再整理一些控制结构的相关练习欢迎小伙伴的参考。

相关新闻

DOCA 简介与安装

DOCA 简介与安装

1. DOCA 的工程功能定位于商业价值 NVIDIA DOCA(Data Center Infrastructure on a Chip Architecture)的工程功能定位,本质上是在硬件层(BlueField DPU)与商业层(客户粘性与生态锁定)之间构建…

2026/8/9 15:22:04 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/9 15:17:37 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/9 13:48:27 阅读更多 →

最新新闻

重庆购务网站建设怎么避坑?揭秘靠谱公司背后的真心话

重庆购务网站建设怎么避坑?揭秘靠谱公司背后的真心话

说起在重庆做企业官网,尤其是涉及到那种业务逻辑复杂、后台管理要求高的“购务”类系统,很多老板心里其实是打鼓的。什么叫“购务”?简单的说,就是不仅是卖货,还涉及到的采购、订单流转、库存扣减、财务对账等等一整套闭环流程。这不是随便找个模板套一下就能搞定的,它需…

2026/8/9 17:09:48 阅读更多 →
猫抓浏览器扩展:三步搞定网页视频音频下载的终极指南

猫抓浏览器扩展:三步搞定网页视频音频下载的终极指南

猫抓浏览器扩展:三步搞定网页视频音频下载的终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾在网上看到精彩的视频却无…

2026/8/9 17:09:48 阅读更多 →
Unity场景管理:从基础API到Addressables的架构设计与性能优化

Unity场景管理:从基础API到Addressables的架构设计与性能优化

1. 项目概述:为什么场景管理是Unity项目的命脉如果你在Unity开发中遇到过这些问题:游戏加载时卡顿黑屏、切换场景时内存飙升、复杂场景帧率骤降,或者在打包WebGL时初始化时间长得让人抓狂,那么你遇到的核心挑战,本质上…

2026/8/9 17:09:48 阅读更多 →
Unity专业骑乘系统开发:从原理到实践,Horse Animset Pro深度应用指南

Unity专业骑乘系统开发:从原理到实践,Horse Animset Pro深度应用指南

1. 项目概述:为什么需要一个专业的骑乘系统?在Unity里做角色移动、跳跃、攻击,这些功能Asset Store里一抓一大把,教程也遍地都是。但当你接到一个需求,要做一个“能骑马、能控制马匹转向、加速、跳跃,并且角…

2026/8/9 17:08:47 阅读更多 →
集合覆盖问题实战:状态压缩DP与贪心算法在GESP算法学习题中的应用

集合覆盖问题实战:状态压缩DP与贪心算法在GESP算法学习题中的应用

1. 项目概述与核心价值最近在信奥(信息学奥林匹克)的刷题社区里,看到不少同学在讨论P11247这道题,它来自GESP(图形化编程能力等级认证)2024年9月的六级考试,标题叫“算法学习”。这道题本身描述…

2026/8/9 17:08:47 阅读更多 →
VRChat动画进阶:从Gesture Manager原理到复杂交互实现

VRChat动画进阶:从Gesture Manager原理到复杂交互实现

1. 项目概述:为什么你需要一个高效的动画管理器?如果你在VRChat里花过不少时间,或者尝试过为自己的虚拟形象(Avatar)制作一些独特的互动动作,那你大概率经历过这种痛苦:在Unity的Animator Contr…

2026/8/9 17:08:47 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →