25-Java的死循环、嵌套循环、跳转关键字

一、死循环

  • 一直循环的执行下去,如果没有干预不会停止下来
格式:
    
for( ; ; ) {
    System.out.println("我爱中国!");
}

// 经典做法
while(true) {
    System.out.println("我爱中国!");
}

do {
    System.out.println("我爱中国!");
}while(true);
  • 死循环在服务器上用的是比较多的
    • 比如:
      • 百度
      • Google浏览器
      • 等等
    • 你随时随地都可以访问这些服务,其实就是一个死循环
package com.app.loop;

public class InfiniteLoopDemo8 {
    public static void main(String[] args) {
        // 目标:学会定义死循环
//        for (int i = 0; ; i++) {    // 不定义循环条件,不受限制,死循环
//            System.out.println("我爱中国~~~~");
//        }

//        for ( ; ; ) {   // 不定义初始化语句,不定义循环条件,不定义迭代语句。分号不能去掉,基本格式就是这样,语法规定
//            System.out.println("我爱中国~~~~");
//        }

       	  // 经典写法,专业
//        while (true) {  // 将循环条件定义为true——>真,判断永远为true,死循环
//            System.out.println("我爱中国~~~~");
//        }

        do {
            System.out.println("我爱中国~~~~");
        } while (true);  // 将判断条件定义为true,判断永远为true,死循环
    }
}
输出结果都是:
我爱中国~~~~
我爱中国~~~~
我爱中国~~~~
我爱中国~~~~
我爱中国~~~~
我爱中国~~~~
我爱中国~~~~
我爱中国~~~~
我爱中国~~~~
......

二、死循环案例:密码验证

  • 需求:
    • 系统密码是520,请用户不断的输入密码验证,验证不对提示密码错误,验证成功提示欢迎进入系统,并停止程序运行
  • 分析:
    • 使用while死循环,让用户不断输入密码
    • 与密码比对:验证不成功提示密码错误,验证成功提示欢迎进入系统,并使用break结束当前循环的执行
package com.app.loop;

// 1.导入扫描器对象包
import java.util.Scanner;

public class InfiniteLoopTest9 {
    public static void main(String[] args) {
        // 目标:通过密码验证案例,更深入理解死循环的应用
        /*
            需求:
                系统密码是520,请用户不断的输入密码验证,验证不对提示密码错误,验证成功提示欢迎进入系统,并停止程序运行
            分析:
                (1) 使用while死循环,让用户不断输入密码
                (2) 与密码比对:验证不成功提示密码错误,验证成功提示欢迎进入系统,并使用break结束当前循环的执行
            实现:
                1.导入扫描器对象包
                2.定义系统密码
                3.创建扫描器对象,用于用户输入密码
                4.定义while死循环,让用户不断输入密码验证
                5.定义变量,用于接收用户输入的密码
                6.if判断用户输入的密码 是否符合系统密码
                7.验证成功,则提示密码正确,欢迎进入系统,使用break结束所在循环的执行
                8.验证失败,提示密码错误,让用户继续输入密码
         */

        // 2.定义系统密码
        int systemPassword = 520;

        // 3.创建扫描器对象,用于用户输入密码
        Scanner sc = new Scanner(System.in);

        // 4.定义while死循环,让用户不断输入密码验证
        while (true) {
            System.out.println("请您输入密码:");
            // 5.定义变量,用于接收用户输入的密码
            int password = sc.nextInt();
            
            // 6.if判断用户输入的密码 是否符合系统密码
            if (password == systemPassword) {
               // 7.验证成功,则提示密码正确,欢迎进入系统
                System.out.println("欢迎进入系统!");
                break;  // 使用break结束所在循环的执行
            }else {
                // 8.验证失败,提示密码错误,让用户继续输入密码
                System.out.println("密码错误!");
            }
        }
    }
}
请您输入密码:
34
密码错误!
请您输入密码:
54
密码错误!
请您输入密码:
5445
密码错误!
请您输入密码:
520
欢迎进入系统!

死循环总结

1、死循环可以怎么写?

写法1:
for( ; ; ) {

}

写法2:(经典写法,常用,专业)
while(true) {

}

写法3:
do {

}while(true);

三、嵌套循环

  • 循环中又包含循环

    for (int i = 0; i<3; i++) {
        
        for (int j = 0; j<5; j++) {
            System.out.println("Hello World");
        }
        
    }
    

嵌套循环的特点

  • 外部循环每循环一次,内部循环全部执行完一次
package com.app.loop;

public class NestedLoopDemo10 {
    public static void main(String[] args) {
        // 目标:学会使用嵌套循环,并理解其执行流程
        // 场景:假如你的女朋友,因为你犯错生气了,罚你说5天,每天3句我爱你

        // 不使用循环嵌套来解决这个来自女友的惩罚
//        for (int i = 0; i < 5; i++) {   // 说5天
//            // 每天3句我爱你
//            System.out.println("我爱你");
//            System.out.println("我爱你");
//            System.out.println("我爱你");
//            System.out.println("------------------");   // 华丽的分割线,便于我们理解输出结果
//        }

        // 使用循环嵌套来解决这个来自女友的惩罚
        for (int i = 1; i < 6; i++) {       // 说5天
            for (int j = 0; j < 3; j++) {       // 每天3句我爱你
                System.out.println("第"+ i + "天说" +"我爱你");      // 重复要说的话
            }
            System.out.println("------------------");     // 华丽的分割线,便于我们理解输出结果
        }

        /*
            循环嵌套执行流程详解:
                外部循环每循环一次,内部循环全部执行完一次

                第一天(女朋友刚生完气):i=1,i<6,符合,判断为true,进入到内部,此时i= 1+1 =2
                    第一次说:j=0,j<3,符合,为true,输出一句 第1天说我爱你,此时 j= 0+1 =1
                    第二次说:j=1,j<3,符合,为true,输出一句 第1天说我爱你,此时 j= 1+1 =2
                    第三次说:j=2,j<3,符合,为true,输出一句 第1天说我爱你,此时 j= 2+1 =3
                    第四次说:j=3,因此,不符合j<3,为false,结束今天的惩罚。
                    然后执行输出华丽的分割线
                第二天(女朋友还没消气):i=2,i<6,符合,判断为true,进入到内部,此时i= 2+1 =3
                    第一次说:j=0,j<3,符合,为true,输出一句 第2天说我爱你,此时 j= 0+1 =1
                    第二次说:j=1,j<3,符合,为true,输出一句 第2天说我爱你,此时 j= 1+1 =2
                    第三次说:j=2,j<3,符合,为true,输出一句 第2天说我爱你,此时 j= 2+1 =3
                    第四次说:j=3,因此,不符合j<3,为false,结束今天的惩罚。
                    然后执行输出华丽的分割线
                第三天(女朋友还没消气):i=3,i<6,符合,判断为true,进入到内部,此时i= 3+1 =4
                    第一次说:j=0,j<3,符合,为true,输出一句 第3天说我爱你,此时 j= 0+1 =1
                    第二次说:j=1,j<3,符合,为true,输出一句 第3天说我爱你,此时 j= 1+1 =2
                    第三次说:j=2,j<3,符合,为true,输出一句 第3天说我爱你,此时 j= 2+1 =3
                    第四次说:j=3,因此,不符合j<3,为false,结束今天的惩罚。
                    然后执行输出华丽的分割线
                第四天(女朋友还没消气):i=4,i<6,符合,判断为true,进入到内部,此时i= 4+1 =5
                    第一次说:j=0,j<3,符合,为true,输出一句 第4天说我爱你,此时 j= 0+1 =1
                    第二次说:j=1,j<3,符合,为true,输出一句 第4天说我爱你,此时 j= 1+1 =2
                    第三次说:j=2,j<3,符合,为true,输出一句 第4天说我爱你,此时 j= 2+1 =3
                    第四次说:j=3,因此,不符合j<3,为false,结束今天的惩罚。
                    然后执行输出华丽的分割线
                第五天(女朋友还没消气):i=5,i<6,符合,判断为true,进入到内部,此时i= 5+1 =6
                    第一次说:j=0,j<3,符合,为true,输出一句 第5天说我爱你,此时 j= 0+1 =1
                    第二次说:j=1,j<3,符合,为true,输出一句 第5天说我爱你,此时 j= 1+1 =2
                    第三次说:j=2,j<3,符合,为true,输出一句 第5天说我爱你,此时 j= 2+1 =3
                    第四次说:j=3,因此,不符合j<3,为false,结束今天的惩罚。
                    然后执行输出华丽的分割线
                第六天(女朋友心情有好转):i=6,因此不符合i<6,判断为false,结束来自女友的全部惩罚
         */
    }
}
输出结果:

第1天说我爱你
第1天说我爱你
第1天说我爱你
------------------
第2天说我爱你
第2天说我爱你
第2天说我爱你
------------------
第3天说我爱你
第3天说我爱你
第3天说我爱你
------------------
第4天说我爱你
第4天说我爱你
第4天说我爱你
------------------
第5天说我爱你
第5天说我爱你
第5天说我爱你
------------------

四、嵌套循环案例:打印矩形

  • 需求:

    • 在控制台使用 * 打印出4行5列的矩形

      输出效果:
      
      *****
      *****
      *****
      *****
      
  • 分析:

    • 解法1:直接使用一个for循环实现,但只适用于列数少的情况下,不建议使用,显得不专业

      for (int i = 0; i < 4; i++) {
         	System.out.println("*****");
      }
      
      输出结果:
      *****
      *****
      *****
      *****
      
      
    • 解法2:更专业,高级

      • 1、先定义一个外部for循环,用于打印行数 4
      • 2、再定义一个内部for循环,用于打印列数 5
      • 3、在内部for循环中,重复执行 打印 * (将输出语句的 ln 去掉:目的是为了将循环输出的所有 * 打成一条长棍)
      • 4、当内部for循环每次执行完一次后,加一个换行:目的是为了实现 4行 5列
      package com.app.loop;
      
      public class NestedLoopTest11 {
          public static void main(String[] args) {
              // 目标:通过使用 * 打印矩形的案例,更深入理解循环嵌套的应用
              /*
                  需求:在控制台使用  *  打印出4行5列的矩形
               */
      
              // 不使用循环嵌套来实现这个需求,但只适用于列数少的情况下
      //        for (int i = 0; i < 4; i++) {
      //            System.out.println("*****");
      //        }
      
              // 使用循环嵌套来实现这个需求
              for (int i = 0; i < 4; i++) {   // 外部循环用于打印行数 4,竖形
                  for (int j = 0; j < 5; j++) {   // 内部循环用于打印列数 5,横形
                      // 将 ln 去掉,表示不换行,不然就会每输出一个 * 就会换一行,变成竖形,我们需要的是横形
                      // 将 ln 去掉,目的是将循环输出的所有 * 打成一条平躺的长棍,正是我们需要的横形
                      System.out.print("*");
                  }
                  // 这里打印换行的目的是为了实现 4行 5列:当内部for循环每打印完5个 * 后换一行
                  System.out.println();
              }
          }
      }
      
      输出结果:
      
      *****
      *****
      *****
      *****
      
      

五、跳转关键字

1、break
  • 用于跳出并结束当前所在循环的执行
2、continue
  • 用于跳出当前循环的当次执行,进入下一次循环
3、注意事项
  • break:只能用于结束所在循环,或者结束所在switch分支的执行

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f1DYR3IF-1655223858491)(C:\Users\吴先生\AppData\Roaming\Typora\typora-user-images\image-20220614162755852.png)]

  • continue:只能在循环中进行使用

package com.app.loop;

public class BreakAndContinueDemo12 {
    public static void main(String[] args) {
        // 目标:学会使用跳转关键字: break、continue
        // 场景1:假如你女朋友因为你犯错生气了,罚你做5天家务,每天都是洗碗,但是三天后,她心软了,就原谅你了
        /*
            具体实现:
                1.先定义一个for循环,定义初始化语句为:int i = 1; 定义循环条件为:i<6; (5天家务); 定义迭代语句 i++
                2.每天重复一件事:洗碗
                3.再使用if判断,是否做家务够3天了,够了,则表示女友心软了,原谅你了
                4.使用break结束当前所在循环的执行
         */
        // break:跳出并结束当前所在循环的执行
        System.out.println("----------------------break的使用----------------------");
        // 1.先定义一个for循环,定义初始化语句为:int i = 1; 定义循环条件为:i<6; (5天家务); 定义迭代语句 i++
        for (int i = 1; i < 6; i++) {
            // 2.每天重复一件事:洗碗
            System.out.println("第" + i + "天快乐的洗碗~~~");
            // 3.再使用if判断,是否做家务够3天了
            if (i == 3) {
                // 够了,则表示女友心软了,原谅你了
                System.out.println("今天女友说原谅我了!可以结束快乐的洗碗了~");
                // 4.使用break结束当前所在循环的执行
                break;
            }
        }



        // 场景2:假如你女朋友因为你犯错生气了,罚你做5天家务,每天都是洗碗,但到了第三天她心软了,原谅你了;但是依旧不解恨,继续洗第4、5天
        /*
            具体实现:
                1.先定义一个for循环,定义初始化语句为:int i = 1; 定义循环条件为:i<6; (5天家务); 定义迭代语句 i++
                2.每天重复一件事:洗碗
                3.先if判断,是否做家务够3天了,够了,则表示女友心软了,原谅你了,但是依旧不解恨,使用continue立即跳出当次执行,进入下一次循环,继续让你洗第4、5天
         */
        // continue:跳出当前循环的当次执行,进入下一次循环
        System.out.println("----------------------continue的使用----------------------");
        // 1.先定义一个for循环,定义初始化语句为:int i = 1; 定义循环条件为:i<6; (5天家务); 定义迭代语句 i++
        for (int i = 1; i < 6; i++) {
            // 3.先if判断,是否做家务够3天了,够了,则表示女友心软了,原谅你了,但是依旧不解恨,继续让你洗第4、5天
            if (i == 3) {
                // 够了,则表示女友心软了,原谅你了,但是依旧不解恨,使用continue跳出当次执行,进入下一次循环,继续让你洗第4、5天
                System.out.println("今天女友说原谅我了!但好像没有完全解恨,看来我是要继续完成剩余两天的洗碗活了!");
                continue;   // 立即跳出当前循环的当次执行,进入下一次循环
            }
            // 2.每天重复一件事:洗碗
            System.out.println("第" + i + "天快乐的洗碗~");
        }
    }
}
输出结果:

----------------------break的使用----------------------
第1天快乐的洗碗~~~
第2天快乐的洗碗~~~
第3天快乐的洗碗~~~
今天女友说原谅我了!可以结束快乐的洗碗了~
----------------------continue的使用----------------------
第1天快乐的洗碗~
第2天快乐的洗碗~
今天女友说原谅我了!但好像没有完全解恨,看来我是要继续完成剩余两天的洗碗活了!
第4天快乐的洗碗~
第5天快乐的洗碗~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值