for

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

for省略条件

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

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

for each

for循环经常用来遍历数组,因为通过计数器可以根据索引来访问数组的每个元素:

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循环能够遍历所有“可迭代”的数据类型,包括ListMap

标号配合continue与break

可以给语句块加标号赋予它们名称,标号位于语句之前。标号只能被continuebreak引用,`标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
`
label:statement
语句前只允许加一个标号,标号后面不能跟大括号。通过用break后加标号对处于标号中的语句进行控制。往往标号后是for.while.do-while等循环。
通过用标号,可以对外层循环进行控制
1)用continue控制标号

public class Label {
 
    public static void main(String[] args) {
        System.out.println("i j");
        search:
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 50; j++) {
                    if (j == 3)
                        continue search;
                    System.out.println(i+" "+j);
                }
            }
    }
}

运行结果:

i j
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2

可以看出内层循环并没有执行50次,而到了continue时就跳到最外循环去了,continue执行后执行的是i++.
2)用break控制标号

public class Label {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("i j");
        search:
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 50; j++) {
                    if (j == 3)
                        break search;
                    System.out.println(i+" "+j);
                }
            }
    }

运行结果:

    i j
    0 0
    0 1
    0 2

可以看出内层循环也没有执行50次,而且break后循环就再也没执行。break跳出的是最外层循环,跳出了标号的范围。

求Π

public class main {
    
    public static void main(String[] args) {
        double pi = 0;
        for (double i = 1; i < 10000000; i += 2) {
            pi = pi - Math.pow(-1, (i + 1) / 2) / i;
        }
        System.out.println(4 * pi);
    }

}
THE END
最后修改:2020 年 03 月 09 日 15 : 44
本文链接:https://www.j000e.com/%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6/forloop.html
版权声明:本文『[for循环][for each][Label标号][continue][break]』为『Joe』原创。著作权归作者所有。
转载说明:[for循环][for each][Label标号][continue][break] || Joe's Blog』转载许可类型见文末右下角标识。允许规范转载时,转载文章需注明原文出处及地址。
Last modification:March 9, 2020