第 04 课:for、while、break 与 continue
本课目标
学完后,你应该能够:
- 用
for重复固定或可计算次数的任务。 - 用
while处理次数暂不确定的任务。 - 理解
do-while至少执行一次的特点。 - 使用
break结束循环,使用continue跳过本轮。 - 使用计数器和累加器解决实际问题。
- 识别死循环和常见的边界错误。
1. for 循环
输出 1 到 5:
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
执行顺序:
int i = 1:只执行一次,创建循环变量。i <= 5:每轮开始前检查;为false时结束。- 执行
{}中的循环体。 i++:本轮结束后让i增加 1。- 回到第 2 步。
i++ 等价于:
i = i + 1;
2. 计数器和累加器
计算 1 到 100 的总和:
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum = sum + i;
}
System.out.println(sum); // 5050
i是计数器,控制当前轮次。sum是累加器,保存此前所有轮次的结果。
累加器必须放在循环外声明,否则每轮都会重新变成 0。
3. while 循环
当循环次数取决于某个条件时,while 很自然:
int energy = 3;
while (energy > 0) {
System.out.println("继续学习,剩余精力:" + energy);
energy--;
}
每轮先判断,再执行。因此一开始条件就是 false 时,循环体一次也不执行。
警惕死循环:
int number = 1;
while (number <= 5) {
System.out.println(number);
// 忘记 number++,条件永远为 true
}
4. do-while 循环
do-while 先执行一次,再判断条件:
int number = 10;
do {
System.out.println(number);
number++;
} while (number < 5);
虽然 number < 5 一开始就是假,程序仍输出一次 10。它常用于“至少显示一次菜单,然后询问是否继续”。
注意结尾有分号:while (条件);
5. break 与 continue
break 立即结束整个循环:
for (int i = 1; i <= 100; i++) {
if (i == 5) {
break;
}
System.out.println(i); // 只输出 1、2、3、4
}
continue 只跳过当前这一轮:
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
System.out.println(i); // 不输出 3
}
6. 嵌套循环
循环里面还可以有循环:
for (int row = 1; row <= 3; row++) {
for (int column = 1; column <= 3; column++) {
System.out.print(row + "," + column + " ");
}
System.out.println();
}
外层每执行一轮,内层都会完整执行 3 轮,因此总共执行 3 × 3 = 9 次。
7. 完整示例
运行 LoopBasics.java,它展示:
- 1 到 100 累加;
- 使用
continue跳过奇数; - 使用
while倒计时; - 使用
do-while至少执行一次。
8. 独立练习一:猜数字游戏(完整答案)
运行 GuessNumberGame.java:
- 随机生成 1–100 的答案;
- 最多猜 7 次;
- 每次提示太大或太小;
- 猜中使用
break提前结束; - 输入超出范围时使用
continue,但仍消耗一次机会。
核心循环:
while (attempts < maxAttempts) {
attempts++;
int guess = scanner.nextInt();
if (guess == target) {
guessed = true;
break;
} else if (guess < target) {
System.out.println("太小了");
} else {
System.out.println("太大了");
}
}
9. 独立练习二:九九乘法表(完整答案)
运行 MultiplicationTable.java。外层循环控制行,内层循环从 1 运行到当前行:
for (int row = 1; row <= 9; row++) {
for (int column = 1; column <= row; column++) {
System.out.print(column + "×" + row + "=" + (column * row) + "\t");
}
System.out.println();
}
10. 常见错误
少一次或多一次
i < 5 // i 为 1 时,执行 1、2、3、4
i <= 5 // 执行 1、2、3、4、5
这种错误称为 off-by-one error(差一错误)。重点检查初始值、比较符号和终点。
在循环内重置累加器
for (int i = 1; i <= 10; i++) {
int sum = 0; // 错误:每轮重新创建
sum += i;
}
while 忘记更新条件变量
条件永远为真时会形成死循环。IDEA 中可以点击红色停止按钮终止程序。
11. 检查题与答案
问题
for (int i = 0; i < 5; i++)一共执行几轮?i分别是多少?break与continue有什么区别?while与do-while的核心区别是什么?- 为什么累加器通常在循环外初始化?
- 两层循环各执行 4 次,最内层代码总共执行多少次?
答案
- 执行 5 轮,
i分别是0、1、2、3、4。 break结束整个循环;continue只跳过当前轮,随后进入下一轮。while先判断,可能一次不执行;do-while先执行,至少执行一次。- 如果在循环内初始化,每一轮都会清零,无法保留之前的累计结果。
4 × 4 = 16次。
12. 本课完成标准
- 能独立写出 1 到 100 的累加。
- 能解释何时用
for、何时用while。 - 能正确使用
break、continue。 - 能看懂两层嵌套循环。
- 能检查
<与<=引起的边界差异。
下一课学习方法:把重复逻辑封装成可复用、可传参、可返回结果的代码块。