for循环

for 循环(Java)

除了 whiledo while 循环外,Java 中使用最广泛的是 for 循环

for 循环功能非常强大,通常通过计数器来控制循环次数,特别适合已知循环次数或需要按索引访问数据的场景。


一、for 循环的执行流程

for 循环的特点是:

  1. 初始化计数器
  2. 每次循环前检查条件
  3. 执行循环体
  4. 每次循环后更新计数器

计数器变量通常命名为 i


二、示例:使用 for 循环计算 1 到 100 的和

1
2
3
4
5
6
7
8
9
10
// for
public class Main {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum = sum + i;
}
System.out.println(sum);
}
}

执行说明

  • int i = 1:初始化计数器
  • i <= 100:循环条件
  • i++:每次循环后自动更新计数器

while 循环相比,for 循环把计数器的初始化、判断和更新集中到一处,代码更加清晰。


三、for 循环的标准结构

1
2
3
for (初始条件; 循环条件; 循环后更新计数器) {
// 循环体
}

四、使用 for 循环遍历数组

1
2
3
4
5
6
7
8
9
10
11
12
// for
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 4, 9, 16, 25 };
int sum = 0;
for (int i = 0; i < ns.length; i++) {
System.out.println("i = " + i + ", ns[i] = " + ns[i]);
sum = sum + ns[i];
}
System.out.println("sum = " + sum);
}
}

关键点

  • 数组下标从 0 开始
  • 循环条件应为 i < ns.length
  • i == ns.length 时循环结束

💡 思考:
如果条件写成 i <= ns.length,会发生什么?

👉 会抛出 ArrayIndexOutOfBoundsException


五、for 循环也可能一次都不执行

  • 初始化语句一定会执行
  • 如果条件一开始就为 false,循环体不会执行

六、⚠️ 不要在循环体内修改计数器

错误示例

1
2
3
4
5
6
7
8
9
10
// for
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 4, 9, 16, 25 };
for (int i = 0; i < ns.length; i++) {
System.out.println(ns[i]);
i = i + 1; // 错误!
}
}
}

问题分析

  • for 循环本身会执行 i++
  • 循环体内又执行了一次 i = i + 1
  • 实际每次循环 i 增加 2
  • 导致只打印了一半的元素

📌 结论:

for 循环中,不要在循环体内修改计数器!


七、正确控制步长的方式

如果只想访问 偶数索引

1
2
3
4
int[] ns = { 1, 4, 9, 16, 25 };
for (int i = 0; i < ns.length; i = i + 2) {
System.out.println(ns[i]);
}

✅ 把步长控制逻辑放在 for 语句中,清晰且安全。


八、计数器变量的作用域(重要)

推荐写法(最佳实践)

1
2
3
4
5
int[] ns = { 1, 4, 9, 16, 25 };
for (int i = 0; i < ns.length; i++) {
System.out.println(ns[i]);
}
// i 在此处不可访问

不推荐写法

1
2
3
4
5
6
7
int[] ns = { 1, 4, 9, 16, 25 };
int i;
for (i = 0; i < ns.length; i++) {
System.out.println(ns[i]);
}
// i 仍然可用
int n = i;

📌 原则:

变量的作用域应尽量缩小,避免不必要的误用


九、灵活使用 for 循环

for 循环的三个部分都可以省略:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 省略循环条件(死循环)
for (int i = 0; ; i++) {
...
}

// 省略循环条件和更新语句
for (int i = 0; ;) {
...
}

// 全部省略(死循环)
for (;;) {
...
}

⚠️ 一般不推荐这样写,但在某些特殊场景下可以使用。


十、for each 循环(增强 for)

当我们只关心数组元素的值而不是索引时,可以使用 for each 循环。

示例

1
2
3
4
5
6
7
8
9
// for each
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 4, 9, 16, 25 };
for (int n : ns) {
System.out.println(n);
}
}
}

for 与 for each 对比

对比项 for for each
是否有索引
是否可控制顺序 可以 不可以
语法简洁性 一般 更简洁

📌 for each 还可用于 ListMap 等可迭代类型。


十一、练习

练习 1:倒序输出数组

1
2
3
4
5
6
7
8
9
// for
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 4, 9, 16, 25 };
for (int i = ?; ???; ???) {
System.out.println(ns[i]);
}
}
}

练习 2:使用 for each 求和

1
2
3
4
5
6
7
8
9
10
11
// for each
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 4, 9, 16, 25 };
int sum = 0;
for (???) {
// TODO
}
System.out.println(sum); // 55
}
}

练习 3:使用 for 循环计算 π

公式:

1
2
3
4
5
6
7
8
9
10
11
π / 4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ...
// for
public class Main {
public static void main(String[] args) {
double pi = 0;
for (???) {
// TODO
}
System.out.println(pi);
}
}

十二、小结

  • for 循环通过计数器实现复杂循环
  • for each 循环用于直接遍历元素
  • 最佳实践:
    • 计数器定义在 for 内部
    • 不在循环体中修改计数器
    • 合理选择 forfor each

for循环
https://cryocore1225.github.io/java/liu-cheng-kong-zhi/3f209729.html
作者
Cryocore1225
更新于
2025年12月23日
许可协议