part03——程序流程控制

YangeIT大约 24 分钟Java基础入门ifelseswitchforwhile随机数Random

part03——程序流程控制

目标

  1. 程序流程控制 🍐
    • 顺序结构
    • 分支结构
    • 循环结构
  2. 生成随机数 ✏️

知识储备

  1. 使用键盘输入过数据
  2. 能理解 如果 满18岁 就可以去网吧,否则 不能去网吧 这句话

一、分支结构 🚩

1.1 if分支

if分支

if的作用,是用于对条件进行判断,判断的结果只可能有两个值true或者false,然后根据条件判断的结果来决定执行那段代码

if分支的应用场景

  • 比如,在火车站地铁站等公共场所,会对过往的旅客测体温。如果体温在37度以内,就属于正常的;如果体温在37读以上,测体温的装置就会报警。
  • 再比如,你在使用微信付钱时,微信内部的程序会先判断你的余额是否足够,如果足够就可以支付成功;如果余额不足,就会提示支付失败。

16611301936921661133550463

if分支的格式

if分支格式分为3种,如下 1661131177976

if 第一种形式 (特点:只有如果)

if 第一种形式的代码格式,和执行流程如下图所示

1661131910804
1661131910804
if 第一种形式执行流程如下:
    如果 条件表达式 为true,就执行下面的语句体
    如果 条件表达式 为false,就不执行
/**
目标:掌握if分支的使用和应用场景
 */
public class IfIOperationDemo1 {

    public static void main(String[] args) {
        // if 第一种形式 (特点:只有如果)
        // 需求:测量用户体温,发现体温高于37度就报警。
        double t = 36.9;
        if(t > 37){
            System.out.println("这个人的温度异常,把他赶紧带走~~");
        }
        
    }

}









 
 
 




if 分支小结

if分支有什么作用?举几个应用场景?

  • if作用:if分支可以根据条件,选择执行某段程序
  • if应用场景
    • 比如1:测量用户体温,发现体温高于37度就报警
    • 比如2:发红包,你的钱包余额是99元,现在要发出90元
    • 比如3: 根据员工的绩效打分输出对应的绩效级别
    • 比如4:如果用户名和密码正确,登录成功

if分支的格式有3种:

  • if 第一种形式 (特点:只有如果)
  • if 第二种形式 (特点:如果,否则)
  • if 第三种形式的代码格式(特点:多个如果,一个否则)

课堂练习

案例1:image

案例1:键盘录入考试成绩,根据成绩所在的区间,程序打印出不同的奖励机制:
    如果分数:[95-100]---自行车
    如果分数:[90-94]---游乐园
    如果分数:[80-89]---变形金刚
    如果分数:[0-80]---棍棒伺候

    提示:
    - 键盘录入考试成绩
    - 由于奖励种类较多,属于多种判断,采用if...else...if格式实现
    - 为每种判断设置对应的条件
    - 为每种判断设置对应的奖励


案例2:

image
image
案例2:键盘录入密码, 如果密码为 111111(暂时使用int接收), 程序输出密码正确,否则输出密码有误
  提示:
    -  使用Scanner录入用户输入的密码,并使用变量接受
    - 使用 if...else 组织程序逻辑




1.2 switch分支

switch分支

分支结构的第二种形式——switch分支。

switch 分支的作用:是通过比较值来决定执行哪条分支代码

涉及单词: switch(转换) case(例子) default(默认) break(跳出)

1. switch分支的执行流程

1661134120042
1661134120042

代码操作

下面通过案例来演示一下

相关信息

需求:做个电子备忘录,在控制台分别输出周一到周五的工作安排

  • 周一:埋头苦干,解决bug
  • 周二:请求大牛程序员帮忙
  • 周三:今晚啤酒、龙虾、小烧烤
  • 周四:主动帮助新来的女程序解决bug
  • 周五:今晚吃鸡
  • 周六:与王婆介绍的小芳相亲
  • 周日:郁郁寡欢、准备上班。

代码如下:👇

String week = "周三";
switch (week){
    case "周一":
        System.out.println("埋头苦干,解决bug");
        break;
    case "周二":
        System.out.println("请求大牛程序员帮忙");
        break;
    case "周三":
        System.out.println("今晚啤酒、龙虾、小烧烤");
        break;
    case "周四":
        System.out.println("主动帮助新来的女程序解决bug");
        break;
    case "周五":
        System.out.println("今晚吃鸡");
        break;
    case "周六":
        System.out.println("与王婆介绍的小芳相亲");
        break;
    case "周日":
        System.out.println("郁郁寡欢、准备上班");
        break;
    default:
        System.out.println("您输入的星期信息不存在~~~");
}

总结

如果单从功能上来讲,if 分支 的功能是更加强大的,switch分支能做的事情if 分支都能做。但是具体用哪一种分支形式,也是有一些使用原则的

  • 如果是对一个范围 进行判断,建议使用if分支 结构
  • 如果是与一个一个的值 比较的时候,建议使用switch 分支结构

课堂作业

场景1:通过Scanner接收键盘输入季节字符串,根据季节,输出 春天播种,夏天灌溉 秋天收获 冬天仓储 使用Switch case break 输出

场景2:双十一 满减活动:

  • 满1000 减少100 ;
  • 满2000 减少150 ;
  • 满3000 减少320 ;
  • 满10000 减少1000 ;

使用if 和else if else 输出活动情况。

1.3 switch 注意事项 应对面试 ⚠️

注意事项

各位同学,接下来我们学习swtich的注意事项。同学们掌握这些注意事项之后,就可以避免入坑了,也可以应对一些面试笔试题。

注意事项

    1. 表达式类型只能是byte、short、int、char
    • JDK5开始支持枚举,JDK7开始支持String
    • 不支持double、float、long
    1. case给出的值不允许重复 ,且只能是字面量,不能是变量。
    1. 正常使用switch的时候,不要忘记写break,否则会出现穿透现象

1. 演示switch语句匹配的数据类型

如果下图所示,可以自己分别用变量a、b放在switch语句中匹配试一试,如果遇到不支持的写法,IDEA会报错的。

1661135813464
1661135813464

二、循环结构 ❤️

2.1 for循环

for循环

1. for循环的格式和流程

为了让大家更直观的理解for循环的执行流程,我们直接来看具体的案例代码。

比如:我们想要在控制台打印输出3个HelloWorld 🎯

//需求:打印3行Hello World
for(int i = 0; i < 3; i++) {
    System.out.println("Hello World");
}

如下图所示,是按照下面的① ② ③ ④, ② ③ ④... 的顺序来执行的: 👇

  • 当②条件为true时,再依次执行③④代码,然后回到②继续判断
  • 当②条件为false时,就结束循环
1661137599188
1661137599188

具体执行的每一步可以看下面的图解

1661138616082
1661138616082

代码操作

for循环案例案例

需求:求1~100中所有整数的和

通过这个案例,主要是让同学们掌握一种使用程序来求和的思想。

//1.掌握使用for循环批量产生数据。
for (int i = 1; i <= 100; i++) {
    System.out.println(i);
}

// 求和的思路分析:
// 	1. 首先需要定义一个求和变量,一般命名为sum
// 	2. 再遍历得到所有需要求和的数据(1~100之间的所有整数)
// 	3. 让需要求和的数据和sum累加,
// 	结果:所有数据累加完之后最终sum就是所有数据的和

//2.需求:求1~100中所有整数的和
int sum = 0;
//定义一个循环,先产生1-100,这100个数
for (int i = 1; i <= 100; i++) {
    //每产生一个数据,就把这个数和sum累加
    sum += i; //sum = sum  + i;
}
System.out.println("1-100的数据和:" +  sum);












 
 
 
 
 
 
 

分析上面代码的执行过程:

i=1时:sum=0+1; sum=1;
i=2时:sum=1+2; sum=3;
i=3时:sum=3+3; sum=6;
i=4时:sum=6+4; sum=10;
...
i=100: sum+=99; sum=5050

总结

课堂作业

  1. 在控制台打印输出30个 我 爱 java
  2. 求1~100中所有整数的和
  3. 求1~100之间偶数的和
  4. 在控制台输出所有的“水仙花数”,水仙花数必须满足如下2个要求:?
  • 水仙花数是一个三位数(100-999)
  • 水仙花数的个位、十位、百位的数字立方和等于原数例如:1^3 + 5^3+ 3^3 = 153,说明153是个水仙花数

代码获取三位数的百位、十位、个位

i为100999 的数字
int ge = i % 10;
int shi = (i % 100) / 10;
int bai = i / 100;

2.2 while循环

while循环

各位同学,接下来我们学习第二种循环结构——while循环。

我们先来认识一下while循环长什么样子,然后按照格式写一个while循环的基础案例

1661141338265
1661141338265
/**
目标:掌握while循环的格式和执行流程
 */
public class WhileTest7 {
    public static void main(String[] args) {


        int i=0; //初始化语句
        while (i<3){//循环条件,不满足该条件,循环结束
            System.out.println("hello world "+i);//循环体语句
            i++;//迭代语句
        }
    }
}

代码的执行流程如下图所示:👇

  • 按照① ②③④ ②③④ ... 的流程执行
  • 如果②步骤为true,才循环执行③④步骤
  • 如果②步骤为false,则循环结束
1661141996444
1661141996444
1661141867092
1661141867092

总结

for、while如何选择

学到这里,细心的同学可能会发现while循环和for循环的执行流程是一样的。那他们是不是可以通用呢?

  • 从功能来说:能够用for循环做的,都能用while循环做。
  • 使用规范上来说:
    • 知道循环几次,建议使用for;
    • 不知道循环几次 ,建议使用while

课堂作业

  1. while循环和for循环 有什么区别? 🎤

2.3 折纸案例 ✏️ 🍐

折纸案例

image
image

需求:世界最高山峰珠穆朗玛峰高度是:8848.86米=8848860毫米, 假如我有一张足够大的它的厚度是0.1毫米。

请问:该纸张折叠多少次,可以折成珠穆朗玛峰的高度?

分析流程

分析:首先由于不知道折叠多少次,我们可以选择用while循环

  • 1)纸张的初始化厚度为0.1毫米,珠峰的高度为8848860毫米
	double peakHeight = 8848860;
	double paperThickness = 0.1;
  • 2)每次折叠纸张的厚度为原来的两倍,这是需要循环执行的
while(纸张厚度<8848860){
        纸张厚度*=2;
    }
  • 3)需要求折叠的次数,可以用一个变量来记录折叠的次数
int 次数 = 0;
while(纸张厚度<8848860){
    纸张厚度*=2;
    次数++; //每次折叠次数累加
}
结果:等循环结束之后,打印记录次数的值,就是折叠多少次了。

按照上面分析的思路把代码写出来 ✏️

// 1、定义变量记住珠穆朗玛峰的高度和纸张的高度。单位为毫米
double peakHeight = 8848860;
double paperThickness = 0.1;

// 3、定义一个变量count用于记住纸张折叠了多少次
int count = 0;

// 2、定义while循环控制纸张开始折叠
while (paperThickness < peakHeight) {
    // 把纸张进行折叠,把纸张的厚度变成原来的2倍。
    paperThickness = paperThickness * 2;
    count++;
}
System.out.println("需要折叠多少次:" + count);
System.out.println("最终纸张的厚度是:" + paperThickness);

2.4 do-while循环 👈

do-while循环

1661143715539
1661143715539

如下图所示:do-while循环的执行流程,是按照① ②③④ ②③④... 的顺序执行的。

我们会发现,do-while循环的特点是先执行,再判断的。即使条件不成立,也会先执行一次。

1661143856132
1661143856132

2.5 死循环和循环嵌套和跳转语句

死循环

同学们在写代码时,可能一不小心把代码写成了死循环,所谓死循环就是停不下来的循环。

接下来,带着同学们认识几种死循环的写法。然后再说一下死循环有什么用。

//for死循环
for ( ; ; ){
    System.out.println("Hello World1");
}

//while死循环
while (true) {
    System.out.println("Hello World2");
}

//do-while死循环
do {
    System.out.println("Hello World3");
}while (true);

死循环有什么应用场景呢?

最典型的是可以用死循环来做服务器程序, 比如百度的服务器程序就是一直在执行的,你随时都可以通过浏览器去访问百度。如果哪一天百度的服务器停止了运行,有就意味着所有的人都永不了百度提供的服务了。

对于这样的应用我们目前了解一下就可以了。对于目前来说我们只要知道代码格式该怎么写,能达到什么效果就行。

总结

课堂作业

  1. 死循环有什么特点🎤
  2. 下列循环会打印多少次 i love java 🎤 image
  3. 需求:在控制台使用 * 打印出3行5列的矩形
    *****
    *****
    *****
  1. break 、continue什么含义,有什么注意事项?

2.10 循环结构总结

问题

什么是流程控制?

流程控制是用来控制程序的执行顺序的

分支结构if和switch,如何选择?
  • if分支:一般用于对一个范围进行判断
3<a<8
  • switch分支:对一个一个值进行匹配
a=4或者a=5或者a=6或者a=7
for循环和while循环、do-while如何循环?
  • 知道循环次数用for、
  • 不知道循环次数用while
  • 想要执行,再判断,用do-while

三、生成随机数 🚩

1.1 如何产生一个随机数

随机数

各位同学,接下来我们再学习一个新的知识——生成随机数。

生成随机数其实在很多场景下都很实用,比如:

  1. 在课堂上可以写一个随机点名器点同学起来回答问题
  2. 公司年会可以随机抽奖等

生成随机数的功能,其实 Java已经给我们提供了,在JDK中提供了一个类叫做Random,我们只需要调用Random这个类提供的功能就可以了。

1661147570538
1661147570538
// 目标:掌握使用Random生成随机数的步骤。
// 1、导包。import java.util.Random; (idea会自动完成)
import java.util.Random;
public class RandomDemo1 {

    public static void main(String[] args) {
        // 2、创建一个Random对象,用于生成随机数。
        Random r = new Random();
        // 3、调用Random提供的功能:nextInt得到随机数。
        for (int i = 1; i <= 20; i++) {
            int data = r.nextInt(10); //获取0-9的随机数
            System.out.println(data);
        }
    }
}

1.2 猜数字小游戏

各位同学,接下来我们通过一个案例把前面的流程控制、跳转语句、随机数综合运用一下;

如果能把这个案例写出来,说明你对今天的知识点掌握得挺好了。

需求:
	随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中	  结束游戏

分析:
	1.先随机生成一个1-100之间的数据。
		谁可以帮你生成随机数啊? 是不是要用到Random2.定义一个死循环让用户可以一直猜测。
		用户猜的数据从哪里来啊? 是不是要用到Scanner?

	3.在死循环里,每次让用户录入的数据和随机数进行比较
		如果比随机数大:提示猜大了
		如果比随机数小:提示猜小了
		如果和随机数相同:提示恭喜你猜中了

import java.util.Random;
import java.util.Scanner;

public class RandomTest2 {
    public static void main(String[] args) {
        // 1. 随机产生一个1-100之间的数据,做为中奖号码。
        Random r = new Random();
        int luckNumber = r.nextInt(100) + 1; //产生1-100数字

        
        // 1.1 获取键盘数据数据,模拟用户猜的数字
        Scanner sc = new Scanner(System.in);
        
        // 2. 定义一个死循环,让用户不断的猜测数据
        while (true) {
            // 提示用户猜测
            System.out.println("请您输入您猜测的数据:");
            // 获取键盘输入数据
            int guessNumber = sc.nextInt();

        // 3. 判断用户猜测的数字与幸运号码的大小情况
            if(guessNumber > luckNumber){
                System.out.println("您猜测的数字过大~~");
            }else if(guessNumber < luckNumber){
                System.out.println("您猜测的数字过小~~");zhe
            }else {
                System.out.println("恭喜您,猜测成功了,可以买单了~~");
                break; // 结束死循环
            }
        }
    }
}

总结

课堂作业

  1. 练习一下猜字小游戏案例,巩固下随机数+while循环+if分支+break跳出?🎤

到此,恭喜小伙伴们,今天所有的内容就学习完了,加油奥利给!!!🎉


来做点作业巩固一下吧!!!✏️ 💪