Java循环

今日内容

  • for循环
  • while循环
  • do...while循环
  • 控制跳转语句

教学目标

  • 能够运用switch语句进行编程
  • 能够理解for循环格式和执行流程
  • 能够在循环中加入判断条件并求和
  • 能够完成水仙花数
  • 能够理解while循环的基本使用和执行流程
  • 能够知道do..while循环的格式和执行流程
  • 能够知道break和continue的效果

分支语句-switch语句

格式

switch (表达式) {
    case 1:
        语句体1;
        break;
    case 2:
        语句体2;
        break;
    ...
    default:
        语句体n+1;
        break;
}

格式说明:

  • 表达式:(将要匹配的值) 取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。
  • case:后面跟的是要和表达式进行比较的值 (被匹配的值)。
  • break:表示中断,结束的意思,用来结束switch语句。
  • default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

执行流程:

① 首先计算出表达式的值

② 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。

③ 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

注意事项:

  • case给出的值不允许重复
  • case后面的值只能是常量,不能是变量

案例:根据数据输出星期

int week = 8;
switch(week){
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    case 3:
        System.out.println("星期三");
        break;
    case 4:
        System.out.println("星期四");
        break;
    case 5:
        System.out.println("星期五");
        break;
    case 6:
        System.out.println("星期六");
        break;
    case 7:
        System.out.println("星期日");
        break;
    default:
        System.out.println("数据有误");
        break;
}

第七章 循环

概述:

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句。

Java中循环的分类:

  • for循环
  • while循环
  • do...while循环

7.1 for循环

7.1.1 for循环语句格式

for (初始化语句;条件判断语句;条件控制语句) {
	循环体语句;
}

格式解释:

  • 初始化语句:  用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
  • 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
  • 循环体语句:  用于表示循环反复执行的内容,简单说就是循环反复执行的事情
  • 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去

7.1.2  for循环执行流程

①执行初始化语句

②执行条件判断语句,看其结果是true还是false

            如果是false,循环结束

            如果是true,继续执行

③执行循环体语句

④执行条件控制语句

⑤回到②继续

7.1.4 练习:

  • 需求: 请使用循环, 在控制台打印出 10 次 黑马程序员.
  • 实例代码:

public class Test1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println("黑马程序员");
        }
    }
}

7.1.5 输出数据 1-3 和 3-1

  • 需求:在控制台输出1-3 和 3-1 的数据
  • 示例代码:

public class ForTest01 {
    public static void main(String[] args) {
		//需求:输出数据1-3
        for(int i=1; i<=3; i++) {
			System.out.println(i);
		}
		System.out.println("--------");
		//需求:输出数据3-1
		for(int i=3; i>=1; i--) {
			System.out.println(i);
		}
    }
}

7.1.4 练习:

  • 需求:请使用 Java 程序,在控制台实现出如下效果
  • 运行效果:

干饭倒计时:10秒
干饭倒计时:9秒
干饭倒计时:8秒
干饭倒计时:7秒
干饭倒计时:6秒
干饭倒计时:5秒
干饭倒计时:4秒
干饭倒计时:3秒
干饭倒计时:2秒
干饭倒计时:1秒
终于等到了饭点,干饭人干饭时间!

  • 示例代码:

public class Test2 {
    public static void main(String[] args) {
        for (int i = 10; i >= 1; i--) {
            System.out.println("干饭倒计时:" + i + "秒");
        }
        System.out.println("终于等到了饭点,干饭人干饭时间!");
    }
}

7.1.5 求1-100之间的偶数和

  • 需求:求1-100之间的偶数和,并把求和结果在控制台输出
  • 示例代码:

public class ForTest03 {
    public static void main(String[] args) {
		//求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
		int sum = 0;
		for(int i=1; i<=100; i++) {
			//对1-100的偶数求和,需要对求和操作添加限制条件,判断是否是偶数
			if(i%2 == 0) {
				sum += i;
			}
		}
		//当循环执行完毕时,将最终数据打印出来
		System.out.println("1-100之间的偶数和是:" + sum);
    }
}

7.1.6 水仙花数

  • 需求:在控制台输出所有的“水仙花数”
  • 解释:什么是水仙花数?
    • 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
      • 例如153 3*3*3 + 5*5*5 + 1*1*1 = 153
  • 思路:
    1. 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取
    2. 获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数
  • 示例代码

public class ForTest04 {
    public static void main(String[] args) {
		//输出所有的水仙花数必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结束
		for(int i=100; i<1000; i++) {
			//在计算之前获取三位数中每个位上的值
			int ge = i%10;
			int shi = i/10%10;
			int bai = i/10/10%10;
			
			//判定条件是将三位数中的每个数值取出来,计算立方和后与原始数字比较是否相等
			if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
				//输出满足条件的数字就是水仙花数
				System.out.println(i);
			}
		}
    }
}

7.1.7 计数器思想

  • 需求:在控制台输出所有的“水仙花数”,并统计个数
  • 示例代码:

public class Demo6For {
	/*
		分析:
			1. 定义变量count,用于保存“打印过”的数量,初始值为0
			2. 在判定和打印水仙花数的过程中, 打印后让count变量+1,记录打印过的数量
	*/
	public static void main(String[] args){
		// 1. 定义变量count,用于保存“打印过”的数量,初始值为0
		int count = 0;
		for(int i = 100; i <= 999; i++){
			int ge = i % 10;
			int shi = i / 10 % 10;
			int bai = i / 10 / 10 % 10;
			
			if(	(ge*ge*ge + shi*shi*shi + bai*bai*bai) == i){
				//  2. 在判定和打印水仙花数的过程中, 打印后让count变量+1,记录打印过的数量
				System.out.println(i);
				count++;
			}
		}
	}
}

  • 本题要点:
    • 今后如果需求带有统计xxx,请先想到计数器变量

7.1.8 for循环注意事项

  • 循环 { } 中定义的变量,在每一轮循环结束后,都会从内存中释放
  • 循环 ( ) 中定义的变量,在整个循环结束后,都会从内存中释放
  • 示例代码

for (int i = 1; i <= 5; i++) {
    int a = 10;
    System.out.println(a);
}
//System.out.println(i); 循环外面是无法输出的
//System.out.println(a); 循环外面是无法输出的

  • 循环语句 ( ) 和 { } 之间不要写分号

for (int i = 1; i <= 5; i++); {
    System.out.println("HelloWorld");
}

7.1.9 循环嵌套

在循环语句中, 继续出现循环语句。

代码示例:

for(int i = 1; i <= 5; i++) {
     for(int j = 1; j <= 5; j++) {
         System.out.println("HelloWorld");
     }
}

循环嵌套的核心:

外循环执行一次, 内循环执行一圈

练习:打印出 4 行 5 列的 *

for(int i = 0; i < 4; i++){
    for(int j = 0; j < 5; j++){
        // j = 0 1 2 3 4
        System.out.print("*");
    }
    System.out.println();
}

本题核心:

内循环是表示在一行打印多少个*。表示在一行内进行的操作。

外循环是表示重复执行打印多少行。

循环过程:

外循环的第一次循环:

1,执行外循环,i = 0。

2,执行外循环的条件判断语句,结果为true。

3,进入外循环的循环体。

第一部分:在一行打印了4个*

第二部分:换行操作。

4,执行外循环的条件控制语句i++。i由0变成1


外循环的第二次循环:

1,执行外循环的条件判断语句,结果为true。

2,进入外循环的循环体。

第一部分:在第二行打印了4个*

第二部分:换行操作。

3,执行外循环的条件控制语句i++。i由1变成2


同理,外循环的第三次循环,就是在第三行打印了4个*


同理,外循环的第四次循环,就是在第四行打印了4个*


当第四次循环执行完毕后,此时循环就结束了。

7.2 while循环

7.2.1 while循环语句格式

初始化语句;
while (条件判断语句) {
	循环体语句;
    条件控制语句;
}

7.2.2 while循环执行流程

①执行初始化语句

②执行条件判断语句,看其结果是true还是false

            如果是false,循环结束

            如果是true,继续执行

③执行循环体语句

④执行条件控制语句

⑤回到②继续

示例代码:

public class WhileDemo {
    public static void main(String[] args) {
        //需求:在控制台输出3次 黑马程序员
		//while循环实现
		int j = 1;
		while(j<=3) {
			System.out.println("黑马程序员");
			j++;
		}
    }
}

7.2.3 练习:

  • 需求:求出1-100之间的奇数和,要求使用 while 循环
  • 分析:
    ①定义求和变量 sum,准备记录累加的结果
    ②使用 while 循环,分别获取数据 1 – 100
    ③循环使用 if 语句,筛选出奇数数据
    ④将每一个奇数数据,和 sum 变量进行累加
    ⑤循环结束后,打印求和后的结果
  • 示例代码:

public class Test4 {
    public static void main(String[] args) {
        // 1. 定义求和变量
        int sum = 0;

        // 2. 循环获取数据1-100
        int i = 1;
        while (i <= 100) {
            // 3. 找出奇数元素
            if (i % 2 == 1) {
                // 4. 累加
                sum += i;
            }
            i++;
        }
        // 5. 打印求和结果
        System.out.println(sum);
    }
}

7.3 do...while循环

7.3.1 do...while循环语句格式

初始化语句;
do {
	循环体语句;
	条件控制语句;
}while(条件判断语句);

7.3.2  do...while循环语句执行流程

① 执行初始化语句

② 执行循环体语句

③ 执行条件控制语句

④ 执行条件判断语句,看其结果是true还是false

如果是false,循环结束

如果是true,继续执行

⑤ 回到②继续

示例代码:

public class DoWhileDemo {
    public static void main(String[] args) {
        //需求:在控制台输出5次"HelloWorld"
		//for循环实现
		for(int i=1; i<=5; i++) {
			System.out.println("HelloWorld");
		}
		System.out.println("--------");
        
		//do...while循环实现
		int j = 1;
		do {
			System.out.println("HelloWorld");
			j++;
		}while(j<=5);
    }
}

7.3.3 三种循环的区别

  • for循环 和 while循环(先判断后执行)
  • do...while (先执行后判断)

  • for循环和while的区别
    • for循环中,控制循环的变量, 因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
    • while循环中,控制循环的变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
  • 注意:手动改写 for 循环格式后,将不存在区别,for 循环能够实现的 while 都能实现,反之也一样
int i = 0;
for(; i < 4; i++;) {
   
}
System.out.println(i);   // 正常使用

7.4 跳转控制语句

7.4.1 跳转控制语句

概述:

跳转控制语句是用于在循环的过程中,控制循环运行的。

分类:

  • continue 【跳过】某次循环体内容的执行,继续下一次的执行
  • break 【终止】循环体内容的执行,也就是说结束当前的整个循环

代码示例1:

需求: 在10点的时候结束学习

public class Demo1Break {
    public static void main(String[] args) {
        for (int i = 7; i <= 12; i++) {
            if (i == 10) {
                break;//用于结束循环或switch语句.
            }
            System.out.println(i + "点正在学习");
        }
    }
}

代码示例2:

需求: 遇到 3 17 19 号同学跳过.

public class Demo2Continue {
    /*
        需求: 遇到 2 3 号同学跳过.
     */
    public static void main(String[] args) {
        for(int i = 1; i <= 10; i++){
            if(i == 2 || i == 3 ){
                //continue: 跳过某次循环, 继续下一次循环.
                continue;
            }
            System.out.println("老师正在给第" + i + "号同学发冰棍");
        }
    }
}

7.4.2 标号

break和continue都只能操作自己所在的那一层循环。如果想要操作指定的一层, 可以使用标号.

lo:for (int i = 1; i <= 5; i++) {
    for (int j = 1; j <= 3; j++) {
        if (j == 2) {
            break lo;
        }
        System.out.println("黑马程序员");
    }
}

7.5 Random 产生随机数

  • 介绍:Random 跟 Scanner 类似,也是 Java 写好的类,其作用是产生随机数

7.5.1 Random 生成随机数的三个步骤

  • 找符咒

import java.util.Random;

  • 召唤精灵

Random r = new Random();

  • 指挥精灵干活

int num = r.nextInt(10);

小扩号中的数字代表一个范围,  如果传入10.
生成的就是10以内的随机数, 也就是 0-9

  • 生成 1 - 100 之间的随机数

![案例效果](E:\JavaSE\day04\笔记\img\案例效果.png)int num = r.nextInt(100) + 1;

步骤1: r.nextInt(100) 产生 0~99的随机数
步骤2: 对产生的随机数做+1操作
    	0 + 1 ---- 1
    	1 + 1 ---- 2
    	..
    	98 + 1 --- 99
    	99 + 1 --- 100
步骤3: 使用num变量接收

7.5.2 猜数字小游戏

  • 实现思路 :
    • 使用 Random 产生 1-100之间的随机数
    • 使用 Scanner 键盘录入用户猜的数据
    • 使用 if 语句进行比对
    • 将【录入数据】+ 【 if 判断】 使用循环包裹
    • 猜中后,通过break结束循环
  • 代码实现:

public class Test9 {
    public static void main(String[] args) {
        Random r = new Random();
        Scanner sc = new Scanner(System.in);

        // 1. 使用 Random 产生 1-100之间的随机数
        int randomNum = r.nextInt(100) + 1;

        // 2. 使用 Scanner 键盘录入用户猜的数据
        System.out.println("请输入:");

        // 4. 将【录入数据】+ 【if 判断】 使用循环包裹
        while (true) {
            int scNum = sc.nextInt();
            // 3. 使用 if 语句进行比对
            if (scNum > randomNum) {
                System.out.println("猜大了");
            } else if (scNum < randomNum) {
                System.out.println("猜小了");
            } else {
                System.out.println("猜中了");
                // 5. 猜中后,通过break结束循环
                break;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值