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

发布时间:2026/9/22 23:42:16

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

更多相关文章

2026/9/21 11:12:31

OpenClaw部署指南:解决AI环境依赖难题,实现高效开发

1. 项目概述:为什么需要OpenClaw? 如果你在AI、机器学习或者数据科学领域摸爬滚打过一段时间,大概率会遇到一个让人头疼的问题:项目环境依赖。不同的项目需要不同版本的Python、PyTorch、CUDA,甚至是一些特定版本的系…

2026/9/20 0:03:20

ZStack企业级知识工程实践:如何“造”出可信知识?

一位一线工程师在深夜排查一个云主机热迁移失败的问题。报错信息很明确:rsync "connection unexpectedly closed"。他知道公司里一定有人处理过同样的问题——也许在某份文档里,也许在某个工单里,也许在某位同事的聊天记录里。但此…

2026/9/20 0:03:20

2026.7.13(1)【图片隐写】JinSanPang

📌 题目信息项目内容题目名称JinSanPang题目来源BUUCTF题目类型MISC / 图片隐写 / GIF 多帧隐写子分类图片隐写考点帧隐藏信息提取、GIF 动图逐帧分析难度⭐最终 Flagflag{he11ohongke}🛠️ 使用工具StegSolve(或 GIF 帧浏览器/图片编辑软件&…

2026/9/22 23:41:52

交通标高频面试题:3个坑点拆解报错与标准答法

交通标高频面试题:3个坑点拆解报错与标准答法 刚拿到Stack Trace日志时,是不是满屏的红色报错看得人头皮发麻?很多房建工程转行的朋友都卡在【交通标】这个概念上,面试被问到就脑子一片空白。其实这根本不是玄学,而是【高频面试题】里最容易…

2026/9/22 23:41:52

管家婆教程图解原理:3步打通从语法到落地的任督二脉

管家婆教程图解原理:3步打通从语法到落地的任督二脉 刚学完语法,对着空白的编辑器发呆,不知道第一行代码该敲什么?这是很多初学者最真实的困境。很多教程只教你怎么定义变量、怎么循环,却没人告诉你怎么把这些碎片拼成一个能跑起来的业务系统。其实,…

2026/9/22 23:41:52

搞懂脸型分类图:后端高频面试题与版本升级避坑指南

搞懂脸型分类图:后端高频面试题与版本升级避坑指南 刚升完 Spring Boot 3.0,接口全炸了?别慌,这是很多老项目的通病。 这不只是版本兼容问题,更是“脸型分类图”这类数据模型在底层序列化时的逻辑断层。…

2026/9/22 23:36:51

吊旗尺寸选型避坑:3种方案对比保姆级教程

吊旗尺寸选型避坑:3种方案对比保姆级教程 刚出校门进组,是不是也跟我当年一样,对着Python语法书背得滚瓜烂熟,LeetCode刷题刷到手软,可一旦老板扔给你一个“做个吊旗尺寸计算器”的需求,脑子直接一片空白?别慌,这种“学会语法却不知怎…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/22 0:04:49

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点 官方文档几百页翻到头还是懵?面试问到 输电线路在线监测 的数据链路时,脑子一片空白?别慌,这种 高频面试题 我整理了10年,专门治各种“文档太长抓不住重点”的毛病。…

2026/9/22 0:04:49

中介房源管理系统重构避坑:3个关键步骤搞定API变更

中介房源管理系统重构避坑:3个关键步骤搞定API变更 版本升级后 API 全变了,这种痛只有真做过的人懂。 很多团队在接手老旧房产项目时,最崩溃的不是代码烂,而是底层框架升级后,原本熟悉的接口调用方式彻底失效。 这份 保姆级教程…

2026/9/22 0:04:49

3个坑点带你一文搞懂55gg小游戏源码

3个坑点带你一文搞懂55gg小游戏源码 盯着控制台满屏的红色报错,看着那一长串 StackTrace ,是不是脑子瞬间宕机?别急,这种时候最忌讳的就是盲目改代码。很多刚入行的前端同学,面对 55gg 小游戏这类轻量级 H5…

2026/9/22 16:34:32

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

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

2026/9/22 20:01:30

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

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

2026/9/22 13:25:41

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

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

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

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

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