深度理解循环语句

本文详细介绍了Java中的三种主要循环语句:for、while和do...while,包括它们的语法、执行流程和应用场景。还给出了具体的代码示例,如计算纸张折叠次数达到珠穆朗玛峰高度的问题以及大乐透彩票号码生成。此外,文章讨论了break和continue关键字的作用,并提供了练习题目,如打印空心菱形和筛选素数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环语句

一、for循环
  1. for循环语句格式:
     for(初始化语句①; 循环条件语句②; 迭代语句④){
   		循环体语句③
   }
   for(;;){
       循环体语句块;//如果循环体中没有跳出循环体的语句,那么就是死循环
   }

注意:
(1)for(;;)中的两个;是不能多也不能少
(2)循环条件必须是boolean类型
(3)如果循环条件语句②省略的话,就默认为循环条件成立

  1. 执行流程:
    • 第一步:执行初始化语句①,完成循环变量的初始化;

    • 第二步:执行循环条件语句②,看循环条件语句的值是true,还是false;

      • 如果是true,执行第三步;
      • 如果是false,循环语句中止,循环不再执行。
    • 第三步:执行循环体语句③

    • 第四步:执行迭代语句④,针对循环变量重新赋值

    • 第五步:根据循环变量的新值,重新从第二步开始再执行一遍

案例:

如何获取5-1?
		for(int x=5; x>=1; x--){
			System.out.println(x);
		}
二、while循环

注意:
while(循环条件)中循环条件必须是boolean类型

  1. while循环语句格式:

    初始化语句①;
    while (循环条件语句②) {
    循环体语句③;
    迭代语句④;
    }

执行流程:

  • 第一步:执行初始化语句①,完成循环变量的初始化;
  • 第二步:执行循环条件语句②,看循环条件语句的值是true,还是false;
    • 如果是true,执行第三步;
    • 如果是false,循环语句中止,循环不再执行。
  • 第三步:执行循环体语句③
  • 第四步:执行迭代语句④,针对循环变量重新赋值
  • 第五步:根据循环变量的新值,重新从第二步开始再执行一遍

练习:趣味折纸
世界最高山峰是珠穆朗玛峰,它的高度是8844.43米,假如我有一张足够大的纸,它的厚度是0.1毫米。
请问,我折叠多少次,可以折成珠穆朗玛峰的高度?

public class WhileTest01 {
   public static void main(String[] args) {
     //定义一个计数器,初始值为0
   	int count = 0;
   	//定义纸张厚度
   	double paper = 0.1;	
   	//定义珠穆朗玛峰的高度
   	int zf = 8844430;
   	while(paper < zf) {
       	paper *= 2;
   		count++;
   	}
   	System.out.println("需要折叠:" + count + "次");
   }
}
三、do…while循环
  1. do…while循环语句格式:

    初始化语句①
    do {
    循环体语句②;
    迭代语句③;
    } while (循环条件语句④);

注意:
(1)while(循环条件)中循环条件必须是boolean类型
(2)do{}while();最后有一个分号
(3)do…while结构的循环体语句是至少会执行一次,这个和for和while是不一样的

执行流程:

  • 第一步:执行初始化语句①,完成循环变量的初始化;
  • 第二步:执行循环体语句②;
  • 第三步:执行迭代语句③,针对循环变量重新赋值;
  • 第四步:执行循环条件语句④,看循环条件语句的值是true,还是false;
    • 如果是true,根据循环变量的新值,重新从第二步开始再执行一遍;
    • 如果是false,循环语句中止,循环不再执行。

拔高案例:
案例需求:大乐透(前区“35选5”+后区“12选2”),即前区在1-35之间的号码中随机选取5个,后区在1-12之间的号码中随机选取2个,组成一期的中奖号码,请用程序模拟产生一组大乐透中奖号码。
开发提示:

  • 声明一个int类型的数组front,长度为35,默认值都是0;
  • 声明一个int类型的数组after,长度为12,默认值都是0;
  • 随机产生[0,35)之间的整数。如果随机产生的是0,那么就把front[0]修改为1,如果随机产生的是5,那么就把front[5]修改为1,如果随机产生的是10,就把front[10]修改为1。但是如果本次随机产生的是5,而front[5]已经是1了,那么需要重新随机产生一个整数。用这种方式把front数组的这5个元素修改为1。
  • 随机产生[0,12)之间的整数。使用同样的方式,把after数组的2个元素修改为1。
  • 遍历front和after数组,输出大乐透中奖号码,判断front和after数组元素是否为1,如果为1,就显示它的下标+1值。
public class Homowork {
    public static void main(String[] args) {
        int[] front = new int[35];
        int[] after = new int[12];

        for (int i = 1; i <=5; i++) {
            /*
            Math.random():[0,1)的小数
            Math.random() * front.length:[0,front.length)的小数
             (int)(Math.random() * front.length):[0,front.length)的整数,[0,front.length-1]
             */
            int index;
            do{
                index = (int)(Math.random() * front.length);
            }while(front[index]==1);
            front[index] = 1;
        }

        for (int i = 1; i <=2; i++) {
            int index;
            do{
                index = (int)(Math.random() * after.length);
            }while(after[index]==1);
            after[index] = 1;
        }

        System.out.println("本期大乐透中奖号码:");
        System.out.print("前区号码为:");
        for (int i = 0; i < front.length; i++) {
            if(front[i] == 1){
                System.out.print(i+1+"\t");
            }
        }
        System.out.print("\n后区号码为:");
        for (int i = 0; i < after.length; i++) {
            if(after[i] == 1){
                System.out.print(i+1+"\t");
            }
        }
        System.out.println();
    }
}
四、循环语句的区别
  1. 从循环次数角度分析

    • do…while循环至少执行一次循环体语句

    • for和while循环先判断循环条件语句是否成立,然后决定是否执行循环体,至少执行零次循环体语句

  2. 如何选择

    • 遍历有明显的循环次数(范围)的需求,选择for循环
    • 遍历没有明显的循环次数(范围)的需求,循环while循环
    • 如果循环体语句块至少执行一次,可以考虑使用do…while循环
    • 本质上:三种循环之间是可以互相转换的,都能实现循环的功能
  3. 三种循环结构都具有四要素:
    (1)循环变量的初始化表达式
    (2)循环条件
    (3)循环变量的修改的迭代表达式
    (4)循环体语句块

  4. 死循环比较
    ​ for(; ; ){循环体} ,除循环体外不需要执行其他语句,性能略高

    while(true){ 循环体},除循环体外还需要执行小括号里的表达式

五、 嵌套循环
  • 嵌套循环,是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数。当然可以是三种循环任意互相嵌套。
  • 嵌套循环格式:
for(初始化语句①; 循环条件语句②; 迭代语句⑦) {
    for(初始化语句③; 循环条件语句④; 迭代语句⑥) {
      	循环体语句⑤;
    }
}

练习:
打印空心菱形(实心菱形在此基础上进行更改在if条件判断那里进行更改

public void diamond() {
        System.out.println("请输入一个整数(奇数)");
        int a = scanner.nextInt();
        for (int i = 1; i <= (a + 1) / 2; i++) {
            for (int j = 1; j <= a; j++) {
                if (j == (a + 1) / 2 - i + 1 || j == (a + 1) / 2 + i - 1)
                    System.out.print("*\t");
                else System.out.print("\t");
            }
            System.out.println();

        }
六、 关键字:break和continue

1、break关键字

  • 使用场景:终止switch或者当前循环

    • 在选择结构switch语句中

    • 在循环语句中

    • 离开使用场景的存在是没有意义的

案例 :判断是否是素数(速度更快)

public void isPrime() {
        boolean bool = true;
        boolean isPrime = true;
        while (bool) {
            System.out.println("请输入一个正整数:");
            int num = scanner.nextInt();
            if (num == 0)
                bool = false;
            if (num != 2 && num % 2 == 0) {
                isPrime = false;
            } else {
                for (int i = 3; i <= Math.sqrt(num); i += 2) {
                    if (num % i == 0) {
                        isPrime = false;
                        break;
                    }
                }

            }
            if (isPrime) {
                System.out.println(num + "是一个素数");
            } else {
                System.out.println(num + "不是一个素数");
                isPrime = true;
            }
        }
    }
2、 关键字:continue
  • 使用场景:结束本次循环,继续下一次的循环

练习:打印1-100之间的整数,跳过7的倍数和7结尾的数

public static void main(String[] args){  
  //打印1-100之间的整数,跳过7的倍数和7结尾的数   
   for(int i=1; i<=100; i++){       
    if(i%7==0 || i%10==7){          
      continue;           
       //break;     
      }       
      System.out.println(i);  
        }
    } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力奋斗的JAVA小余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值