现在有一个需求:打印1-100的数字,每10个换一行。

如果我们直接使用输出语句的话,会打印到崩溃。。。

Java中除了有顺序结构、选择结构,也有循环结构,可以用循环结构来解决这个问题:从定义一个变量一开始为1,每输出一个数,变量就+1,直到变量等于100,就结束。

Java中有三种循环:while,do...while,for

1.while

语法:

初始化语句;

while(条件表达式)

{ //循环体

//满足条件(为 true 时)执行语句

//迭代语句(退出机制,当不再满足条件时就会退出)

}

//不满足条件则会直接跳过

package com.dh.control;

public class WhileDemo {

    public static void main(String[] args) {
        
        //1.初始化变量
        int i = 1;
        //count用于计数(10个数换一行)
        int count = 0;
        
        while(i<=100){  //2.条件表达式
            //3.执行语句
            System.out.print(i+"\t");
            count++;	//计数器+1
            if(count%10 == 0){
                System.out.println();
            }
            //4.迭代语句(退出机制)
            i++;
        }
    }
}

java while true循环不释放内存 java while循环怎么结束_迭代

注意:如果没有退出机制,或者条件永远为true时,程序就没有办法跳出循环,程序就会一直运行,称为死循环。

一定要尽量避免书写死循环程序,除非真的有使用死循环的需求!

while(true){
    
}

2.do...while

语法:

初始化语句;

do{

//循环执行体

//迭代语句

}while(条件表达式); //不满足条件表达式则跳过则结束循环语句

将上述问题,采用do...while循环来解决:

package com.dh.control;

public class DoWhile {

    public static void main(String[] args) {

        int i = 1;
        int count = 0;

        do{
            System.out.print(i+"\t");
            i++;
            count++;
            if(count%10 == 0){
                System.out.println();
            }
        }while (i<=100);
    }
}

java while true循环不释放内存 java while循环怎么结束_迭代_02

那while和do...while有什么区别呢?看下面这个案例

package com.dh.control;

public class Demo {

    public static void main(String[] args) {

        int i = 1;
        //do...while
        do {
            System.out.println("do...while执行了");
        } while (i < 0);

        //while
        while (i < 0) {
            System.out.println("while执行了");
        }
    }
}

java while true循环不释放内存 java while循环怎么结束_初始化_03

通过观察实验结果,可以看出do...while和while的用法是一致的,只不过do…while 先执行再判断(无论如何都会先执行一次循环执行体中的代码)、while 是先判断再执行,如果条件一开始就不满足,就不会执行循环执行体代码。

3.for

语法:

for((1)初始化变量;(2)条件;(4)更新循环遍历){

//(3)循环体

}

(按照 1234 的顺序执行,1 和 4 可以放在外部,2 省略了的话没有结束条件将会死循环)

我们再用for来解决上述问题:

package com.dh.control;

public class ForDemo {

    public static void main(String[] args) {

        int count = 0;//计数器

        for(int i = 1;i<=100;i++){  //初始化变量;结束条件;迭代变量(退出机制)
            System.out.print(i+"\t");
            count++;
            if(count%10 == 0){
                System.out.println();
            }
        }
    }
}

java while true循环不释放内存 java while循环怎么结束_System_04

可以看到,也是可以输出结果的,在大多数情况下,for循环会比while、do...while循环更简洁,推荐使用for循环!

将初始化变量和变量迭代放在for()外,也是可以的,但是建议放在里面:

java while true循环不释放内存 java while循环怎么结束_System_05

4.break和continue的用法和区别

break

如果现在改了需求呢:我想决定我什么时候不再输出了,即我想让它输出到多少就到多少。

此时就需要一个还未等到循环终止条件,就强制退出的机制,在switch的时候,我们使用了break,在while里也是一样的。


此处使用for循环作为循环结构:while和do...while同理

package com.dh.control;

public class BreakDemo {

    public static void main(String[] args) {

        int count = 0;  

        for(int i = 1;i<=100;i++){  
            System.out.print(i+"\t");

            //使用break退出循环
            if(i == 55){
                break;
            }

            count++;
            if(count%10 == 0){
                System.out.println();
            }
        }
    }
}

java while true循环不释放内存 java while循环怎么结束_迭代_06

可以看到,程序输出到55的时候就不再继续输出了。

continue

但是此时我们又修改了需求呢,我想打印1-100之间除了5的倍数的数,一行输出8个。

此时通过分析需求,只要我们可以跳过某次循环,即5的倍数的时候就跳过,再继续循环,就可以达到目的了。

Java使用continue来跳出当前次的循环

package com.dh.control;

public class ContinueDemo {

    public static void main(String[] args) {

        int count = 0;  //计数器

        for(int i = 1;i<=100;i++){  //初始化变量;结束条件;迭代变量(退出机制)

            //使用continue跳出当前循环,遇到continue就跳出,不再执行剩余循环执行体里面的代码
            //回到for
            if(i % 5 == 0){
                continue;
            }

            System.out.print(i+"\t");
            
            count++;
            if(count%8 == 0){
                System.out.println();
            }
        }
    }
}

我们来看看结果:

java while true循环不释放内存 java while循环怎么结束_初始化_07

结果是达到了我们的需求的。

总结:

  • break:用于跳出整个循环。(通常在循环中与条件语句一起使用,也可用于选择语句);
  • continue:跳过当前次循环,即跳过循环体中剩余的语句而执行下一次循环(只能用在循环里,也通常和条件语句一起使用,加速循环)。