11.【Java】流程控制之循环
摘要本文系统讲解了 Java 中循环结构的核心概念与使用方法涵盖while、do-while、for及增强for循环的语法、执行流程和适用场景并深入介绍了break、continue控制语句、循环嵌套以及常见陷阱。通过丰富的代码示例和综合的猜数字游戏实战帮助初学者快速掌握循环这一实现代码重复执行的关键技术为后续学习打下坚实基础。关键词Java 循环, while 循环, for 循环, break 和 continue, 循环嵌套我们学会了变量来存储数据学会了运算符来处理数据还学会了条件判断来让程序做决策。但你会发现如果程序只会从上到下执行一次那么很多事情都做不了。比如你想打印 100 遍“我爱你”难道要写 100 行System.out.println(我爱你);吗当然不是。如果让你计算 1 到 100 的总和难道要写123...100吗那样既不现实也毫无意义。我们需要一种能力让一段代码重复执行多次直到某个条件不再满足为止。这就是循环Loop。循环是程序设计中最重要的控制结构之一它让程序具备了“批量处理”的能力。Java 提供了三种循环结构while、do-while和for。另外还有一种专门遍历集合的“增强 for 循环”for-each。我们来逐一认识它们。1.while循环 —— 先判断再执行while循环是最基本的一种。它的语法是while(条件){// 循环体当条件为 true 时重复执行这里的代码}执行流程很简单判断条件是否为true。如果是执行一次循环体。执行完后再回到第 1 步继续判断。如果条件为false跳出循环继续执行后面的代码。如果条件一开始就是false循环体一次都不会执行。看一个经典例子打印 1 到 5 的数字。inti1;// 初始化计数器while(i5){// 条件i 小于等于 5System.out.println(i);i;// 更新计数器否则会死循环}System.out.println(循环结束);输出1 2 3 4 5 循环结束这里我们用了三个要素初始化int i 1;条件i 5更新i缺少任何一个循环都可能出问题。尤其是如果忘了i条件永远为真程序会一直打印 1直到你强行终止它——这就是死循环无限循环。写循环时一定要确保条件最终会变为false。while常用于“不确定次数”的循环比如你让用户输入一个正数如果输入的不是正数就一直提示重新输入。你事先不知道用户会输错多少次但循环可以一直问下去。ScannerscannernewScanner(System.in);intnumber;System.out.print(请输入一个正数);numberscanner.nextInt();while(number0){System.out.print(输入无效请重新输入一个正数);numberscanner.nextInt();}System.out.println(你输入了number);2.do-while循环 —— 先执行再判断do-while和while非常相似唯一的不同是do-while先执行一次循环体然后再判断条件。所以至少会执行一次。语法do{// 循环体}while(条件);注意最后有一个分号;别漏掉。把上面的“输入正数”的例子用do-while改写会更自然因为我们至少需要询问一次。ScannerscannernewScanner(System.in);intnumber;do{System.out.print(请输入一个正数);numberscanner.nextInt();}while(number0);System.out.println(你输入了number);这样写代码更紧凑不需要在循环前重复写一次输入语句了。什么时候用while什么时候用do-while如果可能一次都不执行用while。如果至少需要执行一次比如菜单交互、输入验证用do-while。3.for循环 —— 计数循环的“集大成者”for循环是最常用的循环结构尤其适合已知循环次数的场景。它把“初始化”、“条件”、“更新”三个要素整齐地写在一行结构清晰。语法for(初始化;条件;更新){// 循环体}执行顺序执行初始化只执行一次。判断条件如果为true则继续为false则退出。执行循环体。执行更新。回到第 2 步。看一个打印 1 到 5 的例子for(inti1;i5;i){System.out.println(i);}输出一样。这里int i 1只在循环开始时执行一次i在每次循环体执行完后执行。变量i的作用域仅限于for循环内部循环结束后i就不可用了除非你在外部提前定义。更复杂的for用法可以初始化多个变量用逗号分隔但类型必须相同。更新部分也可以多条语句用逗号分隔。三个部分都可以省略但分号不能省。比如for (;;)就是一个死循环相当于while(true)。// 同时初始化 i 和 jfor(inti0,j10;ij;i,j--){System.out.println(ii, jj);}// 输出i0, j10; i1, j9; i2, j8; i3, j7; i4, j6计算 1 到 100 的总和intsum0;for(inti1;i100;i){sumi;// sum sum i}System.out.println(1到100的总和是sum);// 50504. 增强for循环for-each —— 专为遍历而生在 JDK 5 中引入了一种更简洁的循环形式专门用来遍历数组或集合我们后面会详细学。它不需要索引也不需要手动维护计数器语法简单for(元素类型 变量名:数组或集合){// 循环体}比如遍历一个整数数组int[]numbers{10,20,30,40,50};for(intnum:numbers){System.out.println(num);}它会依次把数组中的每个元素赋值给num然后执行循环体。你不用关心索引也不用担心越界。不过增强 for 循环不能修改数组/集合的元素因为它拿到的只是一个副本而且在需要索引的情况下比如要修改某个位置的值也不适用此时还得用普通的for。我们在第四阶段学习集合时会大量使用增强 for现在先留个印象。5.break和continue—— 跳出或跳过在循环体中有时我们需要提前结束循环或者跳过当前这次迭代进入下一次。这时就需要break和continue。break立即终止整个循环跳出循环体执行循环后面的代码。continue立即结束本次迭代跳过本轮循环体中剩余的代码直接进入下一次迭代对于for循环会先执行更新部分再判断条件。// break 示例找到第一个能被 7 整除的数for(inti1;i100;i){if(i%70){System.out.println(第一个能被7整除的数是i);break;// 找到就跳出循环}}// 输出 7// continue 示例打印 1 到 10 之间的奇数for(inti1;i10;i){if(i%20){continue;// 偶数跳过不打印}System.out.println(i);}// 输出 1,3,5,7,9带标签的break和continue了解即可在嵌套循环中break默认只跳出当前最内层循环。如果你想从内层循环直接跳出外层循环可以使用标签labelouter:// 标签后面跟冒号for(inti0;i3;i){for(intj0;j3;j){if(i1j1){breakouter;// 直接跳出外层循环}System.out.println(ii, jj);}}// 只会打印 i0,j0; i0,j1; i0,j2; i1,j0虽然带标签的break有用但过多的嵌套和跳转会降低代码可读性。一般尽量通过设计循环条件来避免复杂跳转。6. 循环嵌套 —— 循环里面套循环一个循环的循环体内包含另一个循环这叫嵌套循环。最常见的场景是打印二维图形、处理矩阵等。比如打印一个 5 行 5 列的星号矩形for(introw1;row5;row){for(intcol1;col5;col){System.out.print(* );}System.out.println();// 每行结束换行}输出* * * * * * * * * * * * * * * * * * * * * * * * *稍微改一下打印一个直角三角形for(introw1;row5;row){for(intcol1;colrow;col){System.out.print(* );}System.out.println();}输出* * * * * * * * * * * * * * *嵌套循环时外层循环控制“行数”或“轮数”内层循环控制“每行的细节”。理解这个层次关系是关键。7. 循环中的常见陷阱死循环条件永远为真。比如while (true)或for (;;)或者忘了更新变量。一定要确保循环能结束。差一错误Off-by-one循环条件中的和搞混导致多一次或少一次。比如要循环 5 次用i 50~4还是i 50~5要清楚。在循环内改变循环变量的值如果不小心在循环体里修改了循环变量可能导致意外行为。break和continue的滥用它们会让代码逻辑变得不那么直观尽量用循环条件本身来控制流程而不是依赖跳转。8. 综合示例 —— 猜数字游戏我们把今天学的循环和条件判断结合起来写一个有趣的“猜数字”游戏程序随机生成一个 1~100 的整数用户输入猜测程序提示“大了”或“小了”直到猜中为止并统计猜的次数。packagecom.example.demo;importjava.util.Scanner;importjava.util.Random;// Random 类用于生成随机数/** * 猜数字游戏演示 while 循环、break、条件判断 */publicclassGuessNumber{publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);RandomrandomnewRandom();// 生成 1~100 的随机整数inttargetrandom.nextInt(100)1;// nextInt(100) 返回 0~991 变成 1~100intguess;intattempts0;booleanguessedfalse;System.out.println( 猜数字游戏 );System.out.println(我已经想好了一个 1~100 之间的整数猜猜看吧);// 使用 while 循环直到猜对为止while(!guessed){System.out.print(请输入你的猜测);guessscanner.nextInt();attempts;if(guesstarget){System.out.println(太小了再大一点);}elseif(guesstarget){System.out.println(太大了再小一点);}else{System.out.println(恭喜你猜对了答案就是 target);System.out.println(你一共猜了 attempts 次。);guessedtrue;// 设置标志退出循环// 也可以用 break但用标志让代码更清晰}}scanner.close();}}这个程序综合了我们学过的变量、运算符、条件判断和循环是一个很好的阶段性练习。9. 循环的选择指南场景推荐循环已知确切的循环次数如遍历数组、计数for根据条件决定是否继续可能一次都不执行while至少需要执行一次如输入验证、菜单do-while遍历数组或集合的所有元素增强forfor-each今天的总结今天我们解锁了程序的“批量处理”能力while先判断后执行可能为 0 次。do-while先执行后判断至少为 1 次。for集初始化、条件、更新于一体适合计数循环。增强for简洁遍历数组/集合。break和continue控制循环的提前退出或跳过。嵌套循环处理多维问题。循环是程序中最常见的结构之一几乎每个有用的程序都离不开它。掌握好循环你就能写出更加强大、灵活的程序。动手试试用for循环计算 1 到 100 之间的奇数和、偶数和并分别打印。用嵌套循环打印一个 9x9 乘法表格式整齐。改写猜数字游戏增加一个限制最多猜 7 次如果 7 次都没猜对提示“游戏结束正确答案是 xxx”并退出用break或条件判断。写一个程序从用户输入一个正整数 n输出它的所有因数能整除 n 的数。比如输入 12输出 1,2,3,4,6,12。循环非常强大但也很容易写出 bug。多练习几次你就能驾驭它了。我们下一篇会讲方法——如何把代码组织成可复用的“积木块”让你的程序更有条理。我们下一篇见。 获取本系列示例代码请访问 GitCode。

相关新闻

二、流体仿真前处理:几何建模与网格划分软件选型指南

二、流体仿真前处理:几何建模与网格划分软件选型指南

1. 流体仿真前处理的核心挑战第一次接触流体仿真项目时,我盯着屏幕上那个扭曲的汽车外流场网格发呆了半小时——明明在CAD软件里光滑的车身曲面,导入网格划分工具后却变成了棱角分明的"乐高积木"。这个惨痛教训让我明白:前处理阶段…

2026/7/15 17:13:43 阅读更多 →
技术干货|Qi 认证全套测试项目拆解,研发整改高频不合格点汇总

技术干货|Qi 认证全套测试项目拆解,研发整改高频不合格点汇总

很多企业送测失败、反复整改,根源是研发阶段不熟悉 WPC 全套测试判定标准。Qi 认证分为**ATL 符合性测试、IOP 互操作性测试**两大模块,合计上百项细分测试,覆盖协议、功率、安全、耐久、电磁兼容、磁吸专项六大板块。结合实验室常年测试数据…

2026/7/15 17:13:43 阅读更多 →
企业GEO AI搜索优化服务商横评 智能体部署私有化选型指南

企业GEO AI搜索优化服务商横评 智能体部署私有化选型指南

内容摘要:本文从行业匹配度、技术自研、效果量化、数据合规、全链路服务、私有化部署六个维度,对2026年GEO AI搜索优化服务商进行系统横评,覆盖全案策略型、技术工具型、内容策略型和垂直场景型四类机构,提供选型建议与避坑指南&a…

2026/7/15 17:11:43 阅读更多 →

最新新闻

一个藏在微信里的“全能地理工具箱”——佳心查经纬度海拔,到底有多实用?

一个藏在微信里的“全能地理工具箱”——佳心查经纬度海拔,到底有多实用?

作为一名常年和GIS打交道的人,我发现开发中最磨人的往往不是大工程,而是那些“小需求”。比如产品经理问“这个功能能不能显示海拔”,客户要验证某个点的坐标偏移,或者自己旅行时需要快速知道“我现在到底海拔多少、当地天气如何”…

2026/7/15 19:28:44 阅读更多 →
计算机小程序毕设实战-基于 SpringBoot的电影管理小程序 基于 SpringBoot + 微信小程序的影视资讯分享平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】

计算机小程序毕设实战-基于 SpringBoot的电影管理小程序 基于 SpringBoot + 微信小程序的影视资讯分享平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/15 19:28:44 阅读更多 →
从零构建文本隐形水印:一种基于Unicode零宽度字符的隐写实践

从零构建文本隐形水印:一种基于Unicode零宽度字符的隐写实践

1. 什么是文本隐形水印?你可能见过图片上的半透明logo,但文本也能藏水印——而且完全看不见。文本隐形水印是一种通过修改文本的底层编码结构,嵌入隐藏信息的技术。就像用隐形墨水在纸上写字,平时看不出痕迹,但用特殊方…

2026/7/15 19:26:43 阅读更多 →
华芯微特SWM34S系列MCU 开发环境搭建与避坑指南

华芯微特SWM34S系列MCU 开发环境搭建与避坑指南

1. 开发环境搭建前的准备工作第一次接触华芯微特SWM34S系列MCU时,我完全被它内置的SDRAM和强大的显示驱动能力吸引了。这款芯片简直就是为HMI应用量身定制的,但要想充分发挥它的性能,开发环境的搭建是第一步,也是最容易踩坑的环节…

2026/7/15 19:26:43 阅读更多 →
车载测试培训选择指南:从CANoe实操到就业实战全解析

车载测试培训选择指南:从CANoe实操到就业实战全解析

这次我们来看一个关于车载测试培训的话题。这个标题直接点出了行业内的一个现象:培训内容和服务质量可能因学员背景而异。对于想要进入车载测试领域或者提升技能的技术人员来说,了解培训的真实情况、选择适合自己的学习路径至关重要。 车载测试作为汽车…

2026/7/15 19:26:43 阅读更多 →
铁路铁轨轨道缺陷检测数据集,铁轨缺陷检测数据集

铁路铁轨轨道缺陷检测数据集,铁轨缺陷检测数据集

铁路铁轨轨道缺陷检测数据集 铁轨缺陷检测数据集 类别为’damage’,‘dirt’,‘unknown’,‘gap’,‘d_dent’,‘d_crush’,‘d_scratch’,‘d_slant’ 原数据集399张 扩充三倍后一共1596张 txt或xml格式 基于铁轨缺陷检测数据集构建一个使用YOLOv8进行目标检测的系统。以下是详…

2026/7/15 19:24:43 阅读更多 →

日新闻

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向红外小目标检测的时空特征融合模块——STFFM,用于增强复杂背景下目标与噪声、杂波的区分能力。该方法通过拼接空间特征与时间/运动特征,并结合通道注意力、空间注意力和残差增强机制,实现对关键语义通道与疑似目标区域的…

2026/7/15 0:01:00 阅读更多 →
YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向复杂背景小目标检测的时空特征融合模块——STFFM。该模块通过空间分支与时间/运动分支的特征拼接,引入通道注意力和空间注意力对融合特征进行自适应筛选,并结合残差增强与通道压缩,突出目标区域、抑制背景噪声。我们将 S…

2026/7/15 0:01:00 阅读更多 →
行星减速机为什么能提高扭矩?从功率守恒到输出扭矩校核

行星减速机为什么能提高扭矩?从功率守恒到输出扭矩校核

一、为什么减速以后扭矩会增大 旋转机械的功率、转速和扭矩之间存在以下关系: T 9550 P n 其中: T为扭矩,单位Nm; P为功率,单位kW; n为转速,单位r/min。 在功率基本不变的情况下:…

2026/7/15 0:03:00 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/14 16:53:23 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/14 14:00:13 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/15 17:52:08 阅读更多 →

月新闻