for 循环

除了while和do while循环,Java使用最广泛的是for循环。

for循环的功能非常强大,它使用计数器实现循环。for循环会先初始化计数器,然后,在每次循环前检测循环条件,在每次循环后更新计数器。计数器变量通常命名为i。

我们把1到100求和用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);
    }
}

在for循环执行前,会先执行初始化语句int i=1,它定义了计数器变量i并赋初始值为1,然后,循环前先检查循环条件i<=100,循环后自动执行i++,因此,和while循环相比,for循环把更新计数器的代码统一放到了一起。在for循环的循环体内部,不需要去更新变量i。

因此,for循环的用法是:

for (初始条件; 循环检测条件; 循环后更新计数器) {
    // 执行语句
}

注意for循环的初始化计数器总是会被执行,并且for循环也可能循环0次。

巧用for循环

for循环还可以缺少初始化语句、循环条件和每次循环更新语句,例如:

// 不设置结束条件:
for (int i=0; ; i++) {
    ...
}
// 不设置结束条件和更新语句:
for (int i=0; ;) {
    ...
}
// 什么都不设置:
for (;;) {
    ...
}

for each循环

Java还提供了另一种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循环的变量n不再是计数器,而是直接对应到数组的每个元素。for each循环的写法也更简洁。但是,for each循环无法指定遍历顺序,也无法获取数组的索引。

除了数组外,for each循环能够遍历所有“可迭代”的数据类型,包括List、Map等。

小结

  • for循环通过计数器可以实现复杂循环;
  • for each循环可以直接遍历数组的每个元素;
  • 最佳实践:计数器变量定义在for循环内部,循环体内部不修改计数器;

results matching ""

    No results matching ""