10-循环与跳出

while循环
循环语句就是让计算机根据条件做循环计算,在条件满足时继续循环,条件不满足时退出循环。
Java提供的while条件循环。它的基本用法是
while (条件表达式) {
    循环语句
}

while循环在每次循环开始前,首先判断条件是否成立。如果计算结果为true,就把循环体内的语句执行一遍,如果计算结果为false,那就直接跳出while循环,继续往下执行。
例如:
//累加1到100
        int sum = 0; // 累加的和,初始化为0
        int n = 1;
        while (n <= 100) { // 循环条件是n <= 100
            sum = sum + n; // 把n累加到sum中
            n ++; // n自身加1
        }
        System.out.println(sum); // 5050

注意:while循环是先判断循环条件,再循环,因此,有可能一次循环都不做。对于循环条件判断,以及自增变量的处理,要特别注意边界条件。如果循环条件永远满足,那这个循环就变成了死循环。
/*
    一个很有意思的循环
    表面上 n 会一直 >0 ,那么条件一直成立
    但是,int类型有最大值,累加到最大后 n会变成 -1
    循环便会跳出
*/
        int n = 1;
        while (n > 0) {
            sum = sum + n;
            n ++;
        }

do while循环
在Java中,while循环是先判断循环条件,再执行循环。而另一种do while循环则是先执行循环,再判断条件,条件满足时继续循环,条件不满足时退出,那么do while循环会至少循环一次
do {
    执行循环语句
} while (条件表达式);


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

在for循环执行前,会先执行初始化语句,然后,循环前先检查循环条件,循环后更新计数器,在for循环的循环体内部,不需要去更新计数器的值。
//for循环计算数组的和
        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];
        }

注意:使用for循环时,计数器变量i要尽量定义在for循环中,遵循访问范围缩到最小的原则。
某些情况下,for循环还可以省略初始化语句、循环条件和每次循环更新语句,但不推荐这样写。
// 不设置结束条件:
for (int i=0; ; i++) {
    ...
}
// 不设置结束条件和更新语句:
for (int i=0; ;) {
    ...
}
// 什么都不设置:
for (;;) {
    ...
}


for each循环
Java还提供了另一种for each循环,可以更简单地遍历数组,但是,for each循环无法指定遍历顺序,也无法获取数组的索引。除了数组外,for each循环能够遍历所有“可迭代”的数据类型,包括List、Map等
        int[] ns = { 1, 4, 9, 16, 25 };
        for (int n : ns) {
            System.out.println(n);
        }


break
无论是while循环还是for循环,都可以用break语句和continue语句跳出循环体
break 语句通常都是配合 if 语句使用。要特别注意,break语句总是跳出自己所在的那一层循环。
例如:
        for (int i=1; i<=10; i++) {
            System.out.println("i = " + i);
            for (int j=1; j<=10; j++) {
                System.out.println("j = " + j);
                if (j >= i) {
                    break;
                }
            }//内层for
            // break跳到这里
            System.out.println("breaked");
        }//外层for
//break位于内层的for循环,会跳出内层for循环,但不会跳出外层for循环        

continue
break会跳出当前循环,也就是整个循环都不会执行了。而continue则是提前结束本次循环,直接继续执行下次循环。在多层嵌套的循环中,continue语句同样是结束本次自己所在的循环。
        int sum = 0;
        for (int i=1; i<=10; i++) {
            System.out.println("begin i = " + i);
            if (i % 2 == 0) {
                continue; // continue语句会结束本次循环
            }
            sum = sum + i;
            System.out.println("end i = " + i);
        }
//当i为奇数时,完整地执行了整个循环,会打印begin i=1 和 end i=1。
//在i为偶数时,continue语句会提前结束本次循环,
//因此,会打印begin i=2但不会打印end i = 2。


break label 用法:跳出多重嵌套循环
break label 则是可以跳出通过label的标签定义的代码块。
        label1://标记语句块 label后面要加 :
        while (true) {
            for (int i = 0; i <= 10; i++) {
                System.out.println("i=" + i);
                if (i == 5) {
                    break label1;//跳出
                }
            }

猜你喜欢

转载自www.cnblogs.com/nsss/p/11417456.html