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.in 的 Scanner 后,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 循环基础学习,并能够独立完成:
- 正序循环
- 倒序循环
- 指定步长循环
- 求和
- 奇数和、偶数和
- 倍数输出
- 数量统计
- 数量和总和同时统计
- 累乘
- 阶乘
- 输入控制循环
- 指定数字乘法表
- 循环边界和常见错误分析

浙公网安备 33010602011771号