Java-循环结构(for,while)

循环语句:
注意:循环一定要能确定循环从哪里开始,循环多少次,什么时候退出循环
1.while循环

a.语法格式:while(表达式){

      循环体语句;//反复做的事
     }
规则:如果表达式为true,执行一次循环体语句,然后再次判断表达式,还为true,继续再执行一次循环体语句,之后继续再次判断表达式……只有当表达式为flase,不再执行循环体语句,直接退出循环,程序往下执行

public class Test1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int i=1;
        while(i<=5){
        System.out.println("今天据说有大雨");
        i++;
        }
    }
}

分析:第1次,i<=5 true,打印 i=2
         第2次,i<=5 true,打印 i=3
         第3次,i<=5 true,打印 i=4
         第4次,i<=5 true,打印 i=5
         第5次,i<=5 true,打印 i=6
         第6次,i<=5 flase,退出循环

b.死循环:循环的表达式(条件)永远为true,一直没有办法终止循环

循环的条件永远为true
开发的时候,一般都建议尽量不要出现死循环现象
while(true){
system.out.println(“一直在执行”);
}
c.While循环最容易出现的错误,就是把while写成死循环,忘记加上控制循环次数变量的增量(i++或++i)
int i=10;
while(i<=20){
System.out.println(“你好”);
}
产生死循环的原因:因为i的值,在循环中一直没有发生任何的改变,i一直都是10,永远都小于20,所以循环的条件都为true,循环会一直执行
d.循环语句可以跟选择语句结合使用

public class Test1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //求100以内所有奇数的和
        int i=1;
        int sum=0;
        while(i<=100){
            if(i%2==1) {
                sum=sum+i;
            }
            i++;
        }
        System.out.print(sum);
    }
}

e.在循环体中i++和++i,等价吗?
eg:int i=1;
    while(i<=5){
    System.out.println(“今天据说有大雨”);
    ++i;
    }
条件比较i的值,而不是表达式的值,所以使用i++和++i(都是i=i+1)两者等价
2.do-while循环
企业开发中使用较少
语法格式:do{
            循环语句
            }while(表达式);
语法规则:首先不管表达式true还是false,都立刻执行一次循环体语句,然后再去判断表达式,如果表达式为true,再执行循环体语句,反之退出循环
特点:do-while不管表达式true还是false,必须要提前执行一次循环体语句
eg:int i=10;
    do{
        System.out.println(“你好”);
    }while(i>=100);
依然会执行一次输出语句

public class Test1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //求1+2+3+...+100的值
        int i=1;
        int sum=0;
        do {
            sum=sum+i;
            i++;
        }while(i<=100);
        System.out.print(sum);
    }
}

3.for循环
企业开发中使用最为广泛
a.语法格式:for(表达式1;表达式2;表达式3){
循环体语句
}
eg:for(i=1;i<=5;i++){
    System.out.println(“i=”+i);
    }
语法规则:首先执行表达式1(i=1),然后执行表达式2(i<=5)的判断,如果表达式2为true,执行循环体语句(System.out.println(“i=”+i);),之后执行表达式3(i++),然后再去执行表达式2(i<=5)的判断,如果表达式2为true,执行循环体语句,之后再去执行表达式3(i++)…知道表达式2为false,退出循环
第1次:循环表达式1表达式2循环体语句表达式3
第2次:              表达式2循环体语句表达式3
第3次:              表达式2循环体语句表达式3
……
当表达式2为false,退出循环
分析for执行过程
第1次:i=1  i<=5 true,打印,i++  i=2,
第2次:       i<=5 true,打印,i++  i=3,
第3次:       i<=5 true,打印,i++  i=4,
第4次:         i<=5 true,打印,i++  i=5,
第5次:         i<=5 true,打印,i++  i=6,
第6次:         i<=5 false,退出for循环
归纳:for循环中,表达式1—初赋值,表达式2—循环条件,表达式3—控制循环次数变量的增量(eg:i++)
b.对比for循环和while循环
while(表达式){
循环体语句
}
eg:int i=1;
    while(i<=10){
    System.out.println(i);
    i++;
}
for(表达式1;表达式2;表达式3){
循环体语句
}
eg:for(int i=1;i<=10;i++){
    System.out.println(i);
    }
相同点:只有当表达式为true,才执行循环体
不同点:for把整个控制循环体次数的条件,都纳入到语法结构for当中
c.最简单的for的死循环
for(;;){
循环体语句
}

public class Test1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //求3000以内所有的闰年
        for(int i=1;i<=3000;i++) {
            if((i%4==0 && i%100!=0)||i%400==0) {
                System.out.println(i);
            }
        }
    }
}

4.退出循环
break:直接退出循环
continue:退出本次循环,继续下次循环

public class Test1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //i=6退出循环
        for(int i=1;i<=10;i++) {
            if(i==6) {
                break;
            }
            System.out.println(i);
        }
    }
}

输入结果:1  2  3  4  5

public class Test1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        for(int i=1;i<=10;i++) {
            if(i==6) {
                continue;
            }
            System.out.println(i);
        }
    }
}

输入结果:1  2  3  4  5  7  8  9  10
一旦执行continue,则本次循环后面的代码都不执行,直接进入到下次循环
5.循环嵌套
一个循环内部,又嵌套一个循环语句
eg:for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
        System.out.println(i+”,”+j);
        }
}
外层循环执行一次,内层循环执行全部
当i=1的时候,i<=3 true
j=1,j<=3 true 输出 j++
j=2,j<=3 true 输出 j++
j=3,j<=3 true 输出 j++
j=4,j<=3 false 退出内层循环 执行i++
当i=2的时候…

posted @ 2020-04-28 10:43  LilyoO  阅读(406)  评论(0编辑  收藏  举报