Java 学习笔记 Day8:for 循环

一、今日学习目标


二、什么是循环

循环用于让一段代码按照指定条件重复执行。

例如,不使用循环输出 1~5:

System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);

使用 for 循环:

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

三、for 循环基本语法

for (初始化语句; 条件判断; 更新语句) {
    循环体;
}

示例:

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

各部分作用:

int i = 1;

初始化循环变量,只在循环开始时执行一次。

i <= 5;

循环条件。结果为 true 时继续循环,为 false 时结束循环。

i++;

每轮循环结束后,让 i 增加 1。

System.out.println(i);

循环体,需要重复执行的代码。


四、for 循环执行过程

下面的代码:

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

执行顺序:

初始化变量
    ↓
判断循环条件
    ↓
条件成立,执行循环体
    ↓
执行更新语句
    ↓
重新判断循环条件

完整过程:

循环次数 i 的值 判断 i <= 5 输出 更新后
1 1 true 1 2
2 2 true 2 3
3 3 true 3 4
4 4 true 4 5
5 5 true 5 6
结束 6 false 不输出 循环结束

记忆顺序:

初始化 → 判断 → 执行循环体 → 更新变量 → 再判断

五、正序循环

从 1 输出到 10:

for (int i = 1; i <= 10; i++) {
    System.out.println(i);
}

i 的变化:

1 → 2 → 3 → …… → 10 → 11

i 变成 11 时:

11 <= 10

条件为 false,循环结束。


六、倒序循环

从 10 输出到 1:

for (int i = 10; i >= 1; i--) {
    System.out.println(i);
}

i 的变化:

10 → 9 → 8 → …… → 1 → 0

i 变成 0 时:

0 >= 1

条件为 false,循环结束。


七、控制循环步长

1. 每次增加 1

i++;

等价于:

i = i + 1;

2. 每次减少 1

i--;

等价于:

i = i - 1;

3. 每次增加 2

i += 2;

等价于:

i = i + 2;

4. 每次增加 5

i += 5;

适合直接遍历 5 的倍数。


八、计算 1~100 的和

int sum = 0;

for (int i = 1; i <= 100; i++) {
    sum += i;
}

System.out.println("1到100的和为:" + sum);

运行结果:

1到100的和为:5050

其中:

sum += i;

等价于:

sum = sum + i;

前几次执行过程:

i 执行前 sum 执行后 sum
1 0 1
2 1 3
3 3 6
4 6 10
5 10 15

九、计算偶数和与奇数和

1. 偶数和

int evenSum = 0;

for (int i = 2; i <= 100; i += 2) {
    evenSum += i;
}

遍历过程:

2、4、6、8……100

结果:

2550

2. 奇数和

int oddSum = 0;

for (int i = 1; i <= 100; i += 2) {
    oddSum += i;
}

遍历过程:

1、3、5、7……99

结果:

2500

验证:

偶数和 + 奇数和 = 总和
2550 + 2500 = 5050

十、输出指定数字的倍数

1. 输出 1~100 中所有 5 的倍数

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

i 的变化:

5 → 10 → 15 → …… → 100 → 105

2. 输出 1~100 中所有 7 的倍数并统计数量

int count = 0;

for (int i = 7; i <= 100; i += 7) {
    System.out.println(i);
    count++;
}

System.out.println("共有 " + count + " 个");

结果:

共有 14 个

count++ 等价于:

count = count + 1;

十一、同时统计数量和总和

统计 1~100 中能被 3 整除的数字数量及总和:

int count = 0;
int sum = 0;

for (int i = 3; i <= 100; i += 3) {
    count++;
    sum += i;
}

System.out.println("能被3整除的数字共有:" + count + "个");
System.out.println("这些数字的总和为:" + sum);

结果:

能被3整除的数字共有:33个
这些数字的总和为:1683

变量职责:

count++;  // 统计数量
sum += i; // 计算总和

十二、使用循环计算乘积

计算 1~10 的乘积:

long product = 1;

for (int i = 1; i <= 10; i++) {
    product *= i;
}

System.out.println("1~10 的乘积为:" + product);

运行结果:

1~10 的乘积为:3628800

其中:

product *= i;

等价于:

product = product * i;

为什么乘积变量从 1 开始

求和时通常从 0 开始:

int sum = 0;

因为:

0 + 任意数字 = 原数字

求乘积时必须从 1 开始:

long product = 1;

因为:

1 × 任意数字 = 原数字

如果从 0 开始,结果会一直是 0。


十三、阶乘

1~10 的乘积也叫 10 的阶乘:

10! = 1 × 2 × 3 × …… × 10

结果:

10! = 3628800

使用用户输入计算阶乘:

Scanner scanner = new Scanner(System.in);

System.out.println("请输入一个 0~20 之间的整数:");
int n = scanner.nextInt();

if (n < 0 || n > 20) {
    System.out.println("错误:请输入 0~20 之间的整数");
    scanner.close();
    return;
}

long product = 1;

for (int i = 1; i <= n; i++) {
    product *= i;
}

System.out.println(n + " 的阶乘为:" + product);

scanner.close();

注意:

0! = 1

当输入 0 时,循环一次也不会执行,product 保持为 1。

long 的范围问题

long 最多可以正确保存:

20! = 2432902008176640000

21! 会超过 long 的范围,产生数据溢出。


十四、输出指定数字的乘法表

例如输入 5,输出 5 的乘法表:

Scanner scanner = new Scanner(System.in);

System.out.println("请输入一个数字:");
int number = scanner.nextInt();

for (int i = 1; i <= 9; i++) {
    System.out.println(number + " × " + i + " = " + number * i);
}

scanner.close();

输入:

5

输出:

5 × 1 = 5
5 × 2 = 10
5 × 3 = 15
5 × 4 = 20
5 × 5 = 25
5 × 6 = 30
5 × 7 = 35
5 × 8 = 40
5 × 9 = 45

这里要注意:

for (int i = 1; i <= 9; i++)

循环次数由乘法表需要输出到几决定,不是由用户输入的数字决定。


十五、常见问题

1. 循环边界写错

正确:

for (int i = 1; i <= 10; i++)

会输出 1~10。

如果写成:

for (int i = 1; i < 10; i++)

只会输出 1~9。


2. 正序循环却使用 i--

错误示例:

for (int i = 1; i <= 10; i--) {
    System.out.println(i);
}

i 会越来越小,条件一直成立,可能形成死循环。

正序循环一般使用:

i++;

倒序循环一般使用:

i--;

3. 输出语句位置错误

只输出最终结果,应放在循环外面:

for (int i = 1; i <= 100; i++) {
    sum += i;
}

System.out.println(sum);

如果写在循环里面:

for (int i = 1; i <= 100; i++) {
    sum += i;
    System.out.println(sum);
}

会输出每次累加的中间结果。


4. 求乘积时初始值写成 0

错误:

long product = 0;

无论后面乘什么,结果都会是 0。

正确:

long product = 1;

5. 重复创建并关闭 Scanner

同一个程序中建议只创建一个 Scanner

Scanner scanner = new Scanner(System.in);

// 所有输入都使用 scanner

scanner.close();

关闭绑定到 System.inScanner 后,System.in 也会被关闭,后面再创建新的 Scanner 可能无法读取输入。


6. 变量名不够清楚

不推荐:

int sum2 = 0;
int sum3 = 0;

推荐:

int evenSum = 0;
int oddSum = 0;

变量名应该能够说明变量的用途。


十六、重点记忆

for 循环执行顺序:
初始化 → 判断 → 循环体 → 更新 → 再判断
求和变量通常从 0 开始
计数变量通常从 0 开始
乘积变量通常从 1 开始
正序循环常用 i++
倒序循环常用 i--
跳步循环常用 i += 步长

十七、最终练习源码

1. ForDemo.java

package Day1to30;

public class ForDemo {
    /**
     * 练习 for 循环的正序、倒序、倍数输出、计数和求和。
     *
     * @param args 命令行参数数组,本程序中未使用
     */
    public static void main(String[] args) {

        // 从 1 正序输出到 10
        System.out.println("正序输出 1~10:");
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }

        // 从 10 倒序输出到 1
        System.out.println("倒序输出 10~1:");
        for (int i = 10; i >= 1; i--) {
            System.out.println(i);
        }

        // 输出 1~100 中所有能被 5 整除的数字
        System.out.println("1~100 中所有能被 5 整除的数字:");
        for (int i = 5; i <= 100; i += 5) {
            System.out.println(i);
        }

        // 输出 1~100 中所有能被 7 整除的数字,并统计数量
        int count7 = 0;

        System.out.println("1~100 中所有能被 7 整除的数字:");
        for (int i = 7; i <= 100; i += 7) {
            System.out.println(i);
            count7++;
        }

        System.out.println("共有 " + count7 + " 个");

        // 统计 1~100 中能被 3 整除的数字数量及总和
        int count3 = 0;
        int sum3 = 0;

        for (int i = 3; i <= 100; i += 3) {
            count3++;
            sum3 += i;
        }

        System.out.println("能被 3 整除的数字共有:" + count3 + " 个");
        System.out.println("这些数字的总和为:" + sum3);
    }
}

2. ForSumDemo.java

package Day1to30;

public class ForSumDemo {
    /**
     * 分别计算 1~100 的总和、偶数和、奇数和,以及 1~10 的乘积。
     *
     * @param args 命令行参数数组,本程序中未使用
     */
    public static void main(String[] args) {

        // 计算 1~100 的总和
        int sum = 0;

        for (int i = 1; i <= 100; i++) {
            sum += i;
        }

        System.out.println("1到100的和为:" + sum);

        // 计算 1~100 中所有偶数的和
        int evenSum = 0;

        for (int i = 2; i <= 100; i += 2) {
            evenSum += i;
        }

        System.out.println("1到100中所有偶数的和为:" + evenSum);

        // 计算 1~100 中所有奇数的和
        int oddSum = 0;

        for (int i = 1; i <= 100; i += 2) {
            oddSum += i;
        }

        System.out.println("1到100中所有奇数的和为:" + oddSum);

        // 计算 1~10 的乘积
        long product = 1;

        for (int i = 1; i <= 10; i++) {
            product *= i;
        }

        System.out.println("1~10 的乘积为:" + product);
    }
}

3. FactorialAndTableDemo.java

package Day1to30;

import java.util.Scanner;

public class FactorialAndTableDemo {
    /**
     * 计算用户输入数字的阶乘,并输出指定数字的乘法表。
     *
     * @param args 命令行参数数组,本程序中未使用
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 计算阶乘
        System.out.println("请输入一个 0~20 之间的整数:");
        int n = scanner.nextInt();

        if (n < 0 || n > 20) {
            System.out.println("错误:请输入 0~20 之间的整数");
            scanner.close();
            return;
        }

        long product = 1;

        for (int i = 1; i <= n; i++) {
            product *= i;
        }

        System.out.println(n + " 的阶乘为:" + product);

        // 输出指定数字的乘法表
        System.out.println("请输入需要输出乘法表的数字:");
        int number = scanner.nextInt();

        for (int i = 1; i <= 9; i++) {
            System.out.println(number + " × " + i + " = " + number * i);
        }

        scanner.close();
    }
}

十八、Day8 学习结果

本日已经完成 for 循环基础学习,并能够独立完成:

  • 正序循环
  • 倒序循环
  • 指定步长循环
  • 求和
  • 奇数和、偶数和
  • 倍数输出
  • 数量统计
  • 数量和总和同时统计
  • 累乘
  • 阶乘
  • 输入控制循环
  • 指定数字乘法表
  • 循环边界和常见错误分析
posted @ 2026-07-12 23:44  忧桑の民工  阅读(8)  评论(0)    收藏  举报