2.5 循环结构语句
循环 = 让程序重复干活。核心是三要素:初始化(起点)→ 条件(闸门)→ 更新(往前挪)。三种写法 while、do…while、for 只是三要素摆放的位置不同,转的圈一模一样。
前置知识:2.4 选择结构语句(条件判断的套路)、2.3 Java中的运算符(i++ 在这节高频上岗)。
1. 为什么需要循环
想打印 1 到 5,不用循环要写 5 行 System.out.println;打印 1 到 10000 呢?循环把"重复的动作"写一遍,让电脑替你重复一万次——这是电脑和人的分水岭:人抄 100 遍会疯,电脑算一亿次面不改色。
2. for 循环:三要素写在一行
for (int i = 1; i <= 5; i++) {
System.out.println("第" + i + "遍");
}
for 括号里的三段(用分号隔开,不是逗号):
| 位置 | 代码 | 作用 | 执行时机 |
|---|---|---|---|
| ① | int i = 1 |
初始化(起点) | 只执行一次 |
| ② | i <= 5 |
条件(闸门) | 每圈开头都问 |
| ③ | i++ |
更新(往前挪) | 每圈末尾执行 |
执行路线(对应上面的图):① 初始化(一次)→ ② 问条件 → true → ③ 干活 → ④ 更新 → 回到 ② 再问 → …… → 某次条件 false → 跳出,继续走循环后面的代码。
拿张纸手动"人肉运行":i=1 打印 → i=2 打印 → … → i=5 打印 → i=6 时条件 6<=5 为 false,跳出。共打印 5 遍,i 的最终值是 6。初学阶段每看到一个循环都手动转两圈,比看十遍讲解都管用。
变量作用域注意:int i 写在 for 括号里,出了循环就消失(2.2 的作用域规则)。想在循环外面用 i,就把声明挪到 for 前面。
3. while 循环:先问再干
int i = 1; // 初始化
while (i <= 5) { // 条件
System.out.println(i);
i++; // 更新
}
三要素被拆散在三个地方,但缺一不可。最常见的事故:忘了写 i++——条件永远成立,程序卡死在里面(死循环)。
适用场景:事先不知道要转几圈——"等用户输对密码为止""文件没读完就继续读"。
4. do…while:先干一次再问
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 5); // ← 别忘了这个分号!
和 while 唯一的区别:先执行一次循环体,再判断条件——所以 do…while 至少跑一次。
int x = 100;
while (x < 10) { // 条件一开始就 false:一次都不跑
System.out.println("while 跑了");
}
do {
System.out.println("do…while 跑了"); // 照样输出一次!
} while (x < 10);
适用场景:"必须先做一次"的事——菜单(先显示菜单再问选几)、输密码(先让输再说对不对)。
5. 三种循环怎么选
| 循环 | 三要素位置 | 特点 | 典型场景 |
|---|---|---|---|
for |
挤在一行 | 知道圈数时最清爽 | 打印 100 遍、遍历 1~100 |
while |
拆三处 | 先问再干,可能一次不跑 | 不知道圈数:"直到输对为止" |
do…while |
拆三处+先干 | 至少跑一次 | 菜单、强制先执行的动作 |
能互相改写,转的圈一模一样——选哪个只看哪种写着最顺眼。初学先用熟 for,它占日常的八成。
6. 嵌套循环:圈里还有圈
for (int i = 1; i <= 3; i++) { // 外圈:管"第几组"
for (int j = 1; j <= 3; j++) { // 内圈:管"组内第几个"
System.out.println("外" + i + "-内" + j);
}
}
// 共 3 × 3 = 9 行输出:外1-内1、外1-内2、外1-内3、外2-内1……
口诀:外圈走一步,内圈跑完整圈。 九九乘法表就是它的经典应用(动手部分有)。
7. break 和 continue:圈里的"急刹"和"跳过"
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 急刹:整个循环直接结束,跳到循环外面
}
System.out.println(i); // 输出 1 2 3 4
}
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过本轮:直接回到 i++ 问下一轮
}
System.out.println(i); // 输出 1 3 5 7 9
}
| 关键字 | 动作 | 一句话 |
|---|---|---|
break |
整个循环立刻结束 | "不干了,走人" |
continue |
本轮到此为止,回到更新接着转 | "这个跳过,下一个" |
和 2.4 的 switch 对照着记:switch 里 break 管"出口",循环里 break 管"急刹"——都是"到此为止"。
8. 死循环:是事故,也是工具
for (;;) { } // 没有条件 → 永远转
while (true) { // 显式永远 true
// 服务器就靠它常驻:一直转,等请求进来再干活
}
- 当事故:忘了
i++、条件写反(i = 5赋值恒真)——程序卡死,IDEA 里点红色方块 ■ 强停 - 当工具:服务器、游戏主循环都靠
while (true)常驻,内部靠 break/return 找出口。先会防它,再认识它的用处
9. 动手:Demo06 三个经典练习
第 1 步:IDEA02 项目 → src → New → Java Class → Demo06,psvm 生成主方法。
第 2 步:抄入求和程序:
public class Demo06 {
public static void main(String[] args) {
int sum = 0; // 累加器:先声明在循环外
for (int i = 1; i <= 100; i++) {
sum += i; // 2.3 的 += 上岗
}
System.out.println("1~100的和:" + sum); // 5050
}
}
sum 必须声明在 for 外面——写在括号里的话每圈都被重置成 0,转 100 圈最后还是 0。这是"累加器"套路的关键一步,也是作用域知识的实战。
第 3 步:再写一个偶数和(练 continue 或改条件,两种写法各试一次)。
第 4 步(进阶,九九乘法表):
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "×" + i + "=" + j * i + "\t");
}
System.out.println(); // 内圈跑完换一行
}
第 5 步(30 秒实验):把求和的 i <= 100 删掉更新 i++ 试试——看死循环长什么样,然后 ■ 强停。亲眼见过一次,你对"三要素"的敬畏就到位了。
10. 常见误区小结
三段用分号隔开:for (int i = 1; i <= 5; i++),两个分号一个不能少(可以省内容,不能省分号)。
条件永远成立 → 死循环。卡死不慌,■ 强停,检查三要素。
差一整个数:<= 100 转 100 圈,< 100 转 99 圈。"差一错误"(off-by-one)是循环界第一 bug,写完手动转两圈验证边界。
} while (条件); ——这里要分号,和 while 的 } 直接收尾不同。
continue 只跳过本轮,循环还活着;break 才是整个结束。记反了输出数量会完全对不上。
11. 自测题
3 次(i = 0, 1, 2 各转一圈)。结束后 i = 3——第 4 次检查时 3 < 3 为 false 才跳出,i 已经变成 3 了。注意这题的 i 从 0 开始,和笔记例子的从 1 开始不同,"差一"就差在这。
do…while 先执行一次循环体再判断,至少跑一次。do…while 场景:先显示菜单再问选择(不先显示一次就没得选);while 场景:等用户输入正确密码(错了重来,但输入这个动作也可以交给 do…while——只要"先做一次"说得通)。
for (int i = 1; i <= 10; i++) {
if (i == 3) continue;
if (i == 7) break;
System.out.println(i);
}
输出 1、2、4、5、6。i=3 被 continue 跳过;i=7 时 break 整个结束,8/9/10 不再执行。
累加器套路:sum 住在循环外不重置,每圈把 i 加进去——第 1 圈加 1、第 2 圈加 2……第 100 圈加 100,等价于 1+2+…+100。关键在 sum 声明在循环外。
① for (int i = 3; i <= 100; i += 3) { System.out.println(i); }(直接从 3 步进 3);② for (int i = 1; i <= 100; i++) { if (i % 3 != 0) continue; System.out.println(i); }(2.3 的取余 + 本节的 continue 合作)。两条路都对——循环题往往不止一种解。
12. 下一步学什么
- ☐ 2.6 方法 —— 把代码打包成积木:定义五部位、形参实参对号入座、return 交货,从此写一次到处喊
- ☐ 动手作业:
Demo06三个练习全跑通,九九乘法表建议贴到自己的笔记里当里程碑
13. 相关笔记
- 2.4 选择结构语句 ← 上一篇:条件判断的套路直接搬进循环
- 2.3 Java中的运算符 ←
i++、%、+=本节三连上岗 - 📇 Java基础 · 索引
- 🏠 返回主页