循环

while循环

1.语法

while (条件表达式) {
    // 条件满足时执行的代码
    // 循环体中通常会有改变条件表达式结果的操作,避免死循环
}

2.注意:

  • 主要条件表达式为true,循环就会一直执行下去
  • 循环体中通常会有改变条件表达式结果的操作,避免死循环
  • 少部分情况需要循环一直执行,比如服务器的请求响应监听等
  • 循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环。会影响程序性能或造成程序卡死崩溃
  • while循环的特点是先判断条件,条件为true时才会执行循环体

3.示例代码:

package com.xxxx.structure;

public class WhileDemo01 {
    public static void main(String[] args) {
        //计算1-100
        int i = 0;
        int sum = 0;
        while (i<=100){
            sum = sum+i;
            i++;
        }
        System.out.println(sum);
    }
}

do...while

1.语法:

do {
    // 循环体,至少会执行一次
    // 同样,循环体中一般要有改变条件表达式结果的操作
} while (条件表达式); // 注意这里结尾有分号

2.注意:

  • do-while循环和while循环类似,但它是先执行一次循环体,再去判断条件。即,循环体至少会被执行一次

3.示例代码:

package com.xxxx.structure;

public class DoWhileDemo {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;
        do {
            sum = sum+i;
            i++;
        }while (i <=100);
        System.out.println(sum);
    }
}

4.Do...while & while
代码示例:

package com.xxxx.structure;

public class DoWhile_While {
    public static void main(String[] args) {
        int a = 0;
        while(a<0){
            System.out.println(a);
            a++;
        }
        System.out.println("*************************");
        do{
            System.out.println(a);
            a++;
        }while(a<0);   
        /*
        输出结果为:
        *************************
        0
        说明*号上面的循环未执行
         */
    }
}

for循环

1.语法:

//一般表达式
for (初始化表达式; 布尔表达式; 迭代表达式) {
    // 循环体
}
//死循环
for (;;){

}

2.注意:

  • for循环适用于已知循环次数的场景,它把初始化、条件判断和迭代操作都整合在了一起。
  • 最先执行初始化步骤,可以声明一种类型,但初始化一种或多个循环控制变量,也可以是空语句;
  • 检测布尔表达式的值,如果为true,循环被执行。如果为false,循环终止,开始执行循环体后的语句;
  • 再次检测布尔表达式,循环执行上面的过程

3.代码示例:

  • 示例01
package com.xxxx.structure;

public class ForDemo02 {
    public static void main(String[] args) {
        //计算1-100的奇数和和偶数和
        int oddSum = 0;
        int eveSum = 0;
        for (int i = 0; i <= 100; i++) {
            if (i%2 != 0){
                oddSum += i;
            }else{
                eveSum+= i;
            }
        }
        System.out.println("奇数的和:"+oddSum);
        System.out.println("偶数的和:"+eveSum);
    }
}
  • 示例02
package com.xxxx.structure;

public class ForDemo03 {
    public static void main(String[] args) {
        //循环输出1-1000之间能用5整除的数,3个一组
        for (int i = 1; i < 1000; i++) {
            if (i%5==0){
                System.out.print(i+"\t");  //注意:这里是print(),不是println()
            }
            if (i%(5*3)==0){   //每行输出3个
                System.out.println();//也可以写`System.out.println("\n")`
            }
            //print() & println()
            /*
            println:输出完会换行
            print:输出完不会换行
             */

        }
    }
}
  • 示例03:打印9*9乘法表
package com.xxxx.structure;

public class ForDemo04 {
    public static void main(String[] args) {
        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {
                System.out.print(j+"*"+i+"="+(j*i) + "\t");
            }
            System.out.println();

        }
    }
}

image

增强型for循环(用于遍历数组或集合)

1.语法:

for (元素类型 变量名 : 数组或集合) {
    // 对每个元素执行的操作
}

2.示例代码:

package com.xxxx.structure;

public class ForDemo05 {
    public static void main(String[] args) {
        int[] numbers = {10,20,30,40,50}; //定义一个数组
        for (int i = 0;i<5;i++){
            System.out.println(numbers[i]);
        }
        System.out.println("=========================");
        for (int x:numbers){
            System.out.println(x);
        }
    }
}

循环控制break&continue

1.break:用于终止整个循环。可在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。break语句也可以再switch中使用;
2.continue:用于跳过当前循环的剩余部分,直接开始下一次循环。语句用在循环语句中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
3.示例代码:

package com.xxxx.structure;

public class BreakDemo {
    public static void main(String[] args) {
        int i = 0;
        while(i<100){
            i++;
            System.out.println(i);
            if (i == 30){
                break;
            }
        }
    }
}
package com.xxxx.structure;

public class ContinueDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println();
                continue;
            }
            System.out.println(i);
        }
    }
}

4.go to关键字

  • goto是一个保留关键字,但 Java 语言本身并不支持直接使用goto语句进行无条件跳转。Java 设计之初有意避免了goto的使用,因为无限制的跳转容易导致代码结构混乱、可读性降低,增加维护难度。可以使用带标签的break和continue来实现;
  • "标签"是指后面跟上一个冒号标识符,例如:label:
  • 对Java来说唯一用到标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由是:希望在其中嵌入另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。
  • 示例代码
package com.xxxx.structure;

public class LabelDemo {
    public static void main(String[] args) {
        //打印101-150之间所有的质数
        int count = 0;
        outer:for (int i=101;i<150;i++){
            for (int j = 2;j<i/2;j++){
                if (i % j == 0){
                    continue outer;
                }
            }
            System.out.print(i+" ");
        }
    }
}

-综合练习

```java
package com.xxxx.structure;

public class TestDemo {
    public static void main(String[] args) {
        //打印三角形 5行
        for(int i = 1; i<=5; i++){
            for (int j = 5; j>=i ; j--){
                System.out.print(" ");
            }
            for (int j = 1; j <=i; j++){
                System.out.print("*");
            }
            for (int j = 1; j<i; j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}