第 5 课 / 共 9 课15 分钟2 个闯关

循环:三段式 for 与增强 for

执行顺序、嵌套循环、找最大值时初值该取什么。

for 循环:三段式

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

圆括号里用分号隔开的三段,各管一件事:

  1. int i = 0 —— 初始化,循环开始前执行一次
  2. i < 5 —— 条件,每轮开始前检查,成立才进循环体
  3. i++ —— 步进,每轮结束后执行

i++ 就是 i = i + 1。执行顺序是:① → ② → 循环体 → ③ → ② → 循环体 → ③ → … 直到 ② 不成立。

把这个顺序在脑子里过一遍,以后所有 for 循环你都能手推出结果。

遍历数组:增强 for

int[] scores = {88, 92, 79};

for (int i = 0; i < scores.length; i++) {
    System.out.println(scores[i]);
}

// 不需要下标时,用增强 for,更清楚也更不容易错
for (int score : scores) {
    System.out.println(score);
}

读作"对 scores 里的每一个 score"。注意数组长度用 .length(没有括号),字符串长度用 .length()(有括号),这俩经常写混。

while 和 do-while

int count = 0;
while (count < 5) {
    System.out.println(count);
    count++;             // 忘了它就是死循环
}

do {
    System.out.println("至少执行一次");
} while (false);

区别是 do-while 先执行再判断,所以循环体至少跑一次。适合"先让用户输入一次,再判断合不合法"。

break 与 continue

for (int i = 0; i < 10; i++) {
    if (i == 5) break;        // 跳出整个循环
    if (i % 2 == 0) continue; // 跳过本轮剩余部分
    System.out.println(i);    // 1 3
}

嵌套循环:九九乘法表

for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.printf("%d×%d=%-4d", j, i, i * j);
    }
    System.out.println();
}

外层走一轮,内层完整走一遍。理解嵌套循环的关键是:内层是外层的循环体的一部分%-4d 表示左对齐占 4 格,让表格对齐。

累加器套路

int total = 0;
for (int i = 1; i <= 100; i++) {
    total += i;
}
System.out.println(total);   // 5050

求和、计数、找最值都是这个骨架:循环外准备容器,循环内更新它。

int[] nums = {3, 9, 1, 7};
int max = nums[0];                    // 先假设第一个最大
for (int n : nums) {
    if (n > max) max = n;             // 见到更大的就换
}

注意 max 的初值取 nums[0] 而不是 0——如果数组里全是负数,初值取 0 就错了。初值怎么定,是这类算法唯一容易错的地方。

10 秒自测

for (int i = 0; i < 3; i++);
    System.out.println(i);

这段有什么问题?

for 后面多了个分号,循环体变成了空语句,println 根本不在循环里——而且 i 已经出了作用域,编译直接报错。多余的分号是一类很难用眼睛发现的 bug。

广告位(未配置 AdSense,上线后在此展示)

动手闯关

读懂了不算会,写出来才算

0/2 已通过

闯关和判题完全免费,交错了不扣任何东西。卡住随时点「问 AI」,它能看到你正在写的代码。

关卡 01选择+10 点 · +15 XP

找最大值的初值

要在 `int[] nums` 里找最大值,`max` 的初值取什么最稳妥?

  • 可能是多选,选错不扣点数,随便试。
登录后闯关拿点数
关卡 02写代码+15 点 · +25 XP

打印 1 到 n 的和

读入正整数 n,用循环求 1 + 2 + ... + n 并输出。

示例输入

10

应该输出

55
javaTab 缩进 4 空格

学完了?标记一下

标记完成会记进度、涨 20 XP,还会点亮连续学习天数。