Java学习-流程控制04循环结构

循环结构

  • while循环
  • do...while循环
  • for循环
  • 在JDK5中引入了一种主要用于数组的增强型for循环

while循环

  • while是最基本的循环结构

    语法结构:

    while(布尔表达式){

    ​ //循环内容

    }

  • 只要布尔表达式为true,循环就会一直执行下去(死循环)。

  • 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。

  • 少部分情况需要死循环,比如服务器的请求响应监听等。

  • 死循环会造成我们程序卡死崩溃,实际开发中一定要注意避免死循环。

思考:计算1+2+3+...+100 = ?

package com.struct.www;

public class WhileDemo01 {
    public static void main(String[] args) {
        //输出1-100
        int i = 1;

        while (i <= 100){
            System.out.println(i);
            i++;
        }
    }
}

package com.struct.www;

public class WhileDemo02 {
    public static void main(String[] args) {
        //伪代码
        //死循环
        while (true){
            //等待客户端连接
            //定时检查
            //...
        }
    }
}

package com.struct.www;

public class WhileDemo03 {
    public static void main(String[] args) {
        //计算1+2+3+...+100

        int i = 1;
        int sum = 0;
        while (i <= 100){
            sum += i;
            i++;
        }
        System.out.println(sum);

    }
}

do...while循环

  • 对于while语句而言,如果不满足条件,则不能进入循环,但有时候我们即使不满足条件,也是至少执行一次。

  • do...while循环和while循环相似,区别在于do...while至少会执行一次。

    语法结构:

    do{

    //循环内容

    }while(布尔表达式);

package com.struct.www;

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

结果与用while执行是一样的

  • while是先判断再执行,do...while是先执行再判断。

  • while和do...while的主要区别是do...while总是保证循环体至少会执行一次。

package com.struct.www;

public class DoWhileDemo02 {
    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循环(重点)

  • 虽然所有的循环结构可以用while或者do...while表示,但是Java提供了另一个语句------for循环,是一些循环结构变得更加简单。

  • for循环结构是支持迭代的一种通用结构,是最有效、最灵活的循环结构

  • for循环执行的次数是在执行前就确定了的

    语法格式:

    for(初始化;布尔表达式;迭代语句){、

    ​ //代码语句

    }

    • 练习1:计算0-100之间的奇数和与偶数和。
    • 练习2:用while和for循环输出1-100之间能被5整除的数,并且每行输出3个。
    • 练习3:打印99乘法表。

    练习1:计算0-100之间的奇数和偶数的和。

    package com.struct.www;
    
    public class ForDemo01 {
        public static void main(String[] args) {
            //练习1:计算0-100之间的奇数和偶数的和。
            
            int sum1 = 0;
            int sum2 = 0;
    
            for (int i = 0; i < 100; i++) {
                if(i%2==0){//偶数
                    sum1 += i;
                }else{//奇数
                    sum2 += i;
                }
                
            }
            System.out.println("偶数和为:"+sum1);
            System.out.println("奇数和为:"+sum2);
        }
    }
    

    练习2:用while和for循环输出1-100之间能被5整除的数,并且每行输出3个。

    package com.struct.www;
    
    public class ForDemo02 {
        public static void main(String[] args) {
            //练习2:用while和for循环输出1-100之间能被5整除的数,并且每行输出3个。
    
            for (int i = 0; i < 100; i++) {
                if(i%5==0){
                    System.out.print(i+"\t");
                    if(i%3==0){
                        System.out.println();
                    }
                }
    
            }
    
        }
    }
    

    练习3:打印99乘法表。

    package com.struct.www;
    
    public class ForDemo03 {
        public static void main(String[] args) {
            //练习3:打印99乘法表。
            for (int i = 1; i <= 9; i++) {
                for (int j = 1; j <= i; j++) {
                    System.out.print(i+"*"+j+"="+(i*j)+"\t");
                }
                System.out.println();
            }
        }
    }
    

    关于for循环有以下几点说明:

    • 最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
    • 然后,检测布尔表达式的值,如果为true,循环体执行,如果为false,循环终止,开始执行循环体后面的语句。
    • 再次检测布尔表达式,循环体执行上面的过程

增强型for循环

  • 这里我们只是见一面,之后数组我们重点使用。

  • JDK5引入了一种主要用于数组或集合的增强型for循环。

    语法格式:

    for(声明语句:表达式){

    ​ //代码语句

    }

  • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配,其作用域限定在循环语句块,其值与此时数组元素的值相等。

  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

package com.struct.www;

public class ForDemo04 {
    public static void main(String[] args) {
        //定义一个数组
        int[] nums = {10,20,30,40,50};

        //遍历数组元素
        for(int x:nums){
            System.out.println(x);
        }
    }

}

break和continue

  • 在任何循环语句的主体部分,均可以使用break控制循环流程。break用于强制结束循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
  • continue语句用于循环语句体中,用于终止某次循环过程,即跳出循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

关于goto关键字

  • goto关键字很早就在程序设计语言中出现,尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用,Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子----带标签的break和continue。
  • “标签”是指后面跟一个冒号标识符,例如:label:
  • 对Java来说唯一用到标签的地方是在循环语句之前。而在循环语句之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但是如果随同标签使用,它们就会中断到存在标签的地方。

break

package com.struct.www;

public class BreakDemo {
    public static void main(String[] args) {
        int i = 0;
        while(i<100){
            i++;
            System.out.println(i);
            if(i==20){
                break;
            }
        }
        System.out.println("123");
    }

}

continue

package com.struct.www;

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);
        }

        //在任何循环语句的主体部分,均可以使用break控制循环的过程。
        //break强行结束整体循环。
        //continue结束本次循环,继续下一次循环。
    }
}

goto 拓展

package com.struct.www;

public class LabelDemo {
    public static void main(String[] args) {
        //打印101-150之间的质数
        //质数是指在大于1的自然数中,除了1和它自身以外不再有其他因数的数
        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.println(i+"");
        }
    }
}

打印三角形(练习)

package com.struct.www;

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();

        }
    }
}
posted on 2025-05-27 14:13  burgess0x  阅读(8)  评论(0)    收藏  举报