流程控制(二)

流程控制(二)

循环语句

循环语句就是在满足一定条件的情况下反复执行某一个操作。在Java中提供了3种常用的循环语句,分别是while循环语句,do…while循环语句和for循环语句。

while循环语句:
while循环语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句。语法:

while(条件表达式) {
    执行语句
}

当条件表达式的值为真时,则执行循环体中的语句,当执行完一次循环体后再重新判断条件表达式,如果值仍然为真则重新执行循环体中的语句,如果值为假则退出循环。

do…while循环语句:
do…while循环语句与while循环语句类似,它们之间的区别是while语句先判断条件是否成立再执行循环体,而do…while语句则先执行一次循环体后,再判断条件是否成立。所以do…while循环语句中的循环体至少要执行一次
语法:

do{
    执行语句
}while(条件表达式);

for循环语句:
for循环语句是程序设计中最常用的循环语句之一。一个for循环可以用来重复执行某个循环体,直到某个条件得到满足。在Java5以后还新增了foreach语法。

for语句:

for(表达式1;表达式2;表达式3;) {
    若干语句;
}

表达式1:初始化表达式,负责完成变量的初始化;
表达式2:循环条件表达式,值为boolean 型的表达式,指定循环条件;
表达式3:循环后操作表达式,负责修整变量。

在执行for循环时,首先执行表达式1,完成变量的初始化工作;下一步判断表达式2的值,true则进入循环体;在执行一次循环体后执行表达式3,这样一轮循环就结束了,下一次循环从执行表达式2开始,值为true则继续进入循环体,否则将退出for循环。

foreach循环语句:
foreach语句是for语句的特殊简化版本,不能完全取代for语句,但任何foreach语句都可以改写成for语句版本。
语法:

for(元素变量x : 遍历对象obj) {
    引用了x的Java语句
}

例如可以利用foreach语句遍历数组:

public class Test {
    public static void main(String[] args) {
        int[] numbers = {1,2,3,4,5};
        for (int i : numbers) {
            System.out.println(i);
        }
    }
}

使用for语句和while语句都可以实现循环,那么到底两者之间有什么区别?

从内存角度考虑:
局部变量在栈内存中存在,当for循环语句结束,那么变量会及时被垃圾回收器及时的释放掉,不浪费空间;
如果使用循环之后还想去访问控制循环语句的那个变量,使用while循环;例如下面的程序。

从应用场景角度考虑:
如果一个需求明确循环的次数,那么使用for循环(开发中使用for循环的几率大于while循环);
如果一个需求,不知道循环了多少次,使用while循环。

代码实现访问控制循环语句的变量:

public class Test {
public static void main(String[] args) {
    //使用for循环
    for(int x = 1 ; x <=5 ; x++){
        System.out.println("for循环");
    }

    //不可以访问控制for循环中的那个变量x
    // System.out.println(x);

    //使用while循环
    int x = 1 ;
    while(x<=5){
        System.out.println("while循环");
        x ++ ;
    }

    //可以访问变量
    System.out.println(x);

    }
}

循环控制

循环控制包含两方面的内容,一方面是控制循环变量的变化方式,另一方面是控制循环的跳转。控制循环的跳转需要用到break和continue两个关键字,这两条跳转语句的跳转效果不同,break是中断循环,continue是执行下一次循环。

break语句:
break语句可以跳出switch语句,同样也可以用break语句跳出当前循环体,从而中断当前循环。
注意:如果是循环嵌套,break语句将只会跳出包含它的最内层的循环结构,即只跳出一层循环。
例如:

public class Test { 
    public static void main(String[] args) {
        for (int i = 0;i < 3;i++) {
            System.out.println("我是外层循环,i = " + i);
            for (int j = 0; j <5;j++) {
                System.out.println("我是内层循环,j = " + j);
                if (j == 1) {
                    System.out.println("跳出内层循环");
                    break;
                }
            }
        }
    }
}

运行结果:
这里写图片描述
从运行结果可以看到,break语句在j=1之后只跳出了包含它的最内层循环。
如果我们想让内层的break语句跳出指定的循环体,我们可以使用Java提供的标签功能,语法如下:

标签名 : 循环体{
    break 标签名;
}

标签名:任意标识符;
循环体:任意循环语句;
break 标签名:跳出指定的循环体,此循环体的标签名必须与break的标签名一致。
例如:

public class Test { 
    public static void main(String[] args) {
        Loop: for (int i = 0;i < 3;i++) {
            System.out.println("我是外层循环,i = " + i);
            for (int j = 0; j <5;j++) {
                System.out.println("我是内层循环,j = " + j);
                if (j == 1) {
                    System.out.println("跳出指定循环");
                    break Loop;
                }
            }
        }
    }
}

运行结果:
这里写图片描述

从运行结果可以看到,break语句跳出了Loop标签指定的循环体,即外层循环。
注意:只能跳出循环,不能跳入循环。
其实,我们可以将标签用在任何语句中,甚至是if语句或者是块语句中,但是不建议这样做。

continue语句:
continue语句是针对break语句的补充。continue语句不是立即跳出循环体,而是跳过本次循环,回到循环条件的测试部分,重新开始循环。
在for循环语句中遇到continue语句后,直接执行“循环后操作表达式”,然后进行条件测试。在while和do…while语句中,continue是直接回到条件测试部分。
例如:

package com.demo;
public class Test { 
    public static void main(String[] args) {
        for (int i = 0;i < 10;i++) {
            if (i % 2 == 0) {
                System.out.println("遇到continue语句了");
                continue;
            }
            System.out.println(i);
        }
    }
}

运行结果:

这里写图片描述

从运行结果可以看到,for循环语句中遇到continue语句后没有执行后面的打印输出语句,而是直接执行了i++,再回到条件检测,重新进入循环。

与break语句一样,continue也支持标签功能,语法如下:

标签名 : 循环体{
    continue 标签名;
}

标签名:任意标识符;
循环体:任意循环语句;
continue 标签名:跳出指定的循环体,此循环体的标签名必须与continue 的标签名一致。

猜你喜欢

转载自blog.csdn.net/is_Javaer/article/details/82593471
今日推荐