四、程序流程控制

发布于:2022-12-07 ⋅ 阅读:(1009) ⋅ 点赞:(0)

1、程序流程控制课程介绍

流程控制语句
Java提供了一些流程控制语句,来控制程序的执行流程。

顺序结构  (程序默认)
如果你没有写其他的结构,按照代码的先后顺序,一次执行程序中大多数的代码都是这样执行的。
public class Test{
   public static void main(String[] agrs){
       System.out.println("A");
       System.out.println("B");
       System.out.println("C");
   }
}

2、分支结构_if_switch_switch穿透性

if分支
根据判定的结果(真或假)决定执行某个分支的代码
if分支有三种格式
格式1:
if(条件表达式){
    语句体;
}
格式2:
if(条件表达式){
    语句体1;
}else{
    语句体2;
}
格式3:
if(条件表达式1){
    语句体1;
}else if(条件表达式2){
    语句体2;
}else if(条件表达式3){
    语句体3;
}
...
else{
    语句体n+1;
}

总结
1、if分支的写法有几种,各有什么特点?
格式1:
if(条件表达式){
    语句体;
}
格式2:
if(条件表达式){
    语句体1;
}else{
    语句体2;
}
格式3:
if(条件表达式1){
    语句体1;
}else if(条件表达式2){
    语句体2;
}else if(条件表达式3){
    语句体3;
}
...
else{
    语句体n+1;
}

switch分支
也是匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好。
switch(表达式){
    case 值1:
        执行代码...;
        break;
    case 值2:
        执行代码...;
        break;
    ....
    case 值n-1:
        执行代码...;
        break;
    default:
        执行代码n;                     
}
执行流程:
1.先执行表达式的值,拿着这个值去与case后的值进行匹配。
2.匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支。
3.如果case后的值都不匹配则执行default代码。

总结
1、switch分支的格式、执行流程是怎么样的?
switch(表达式){
    case 值1:
        执行代码...;
        break;
    case 值2:
        执行代码...;
        break;
    ....
    case 值n-1:
        执行代码...;
        break;
    default:
        执行代码n;                     
}
2、if、switch分支各自适合做什么业务场景?
   if其实在功能上远远大于switch。
   if合适做区间匹配。
   switch适合做:值匹配的分支选择、代码优雅。
   
switch分支注意事项:
1.表达式类型只能byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、
   不支持double、float、long。
2.case给出的值不允许重复,且只能是字面量,不能是变量。
3.不要忘记写break,否则出现穿透现象。

switch的穿透性
如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),
直到遇到break才跳出分支,这就是switch的穿透性。
switch穿透性案例(月份天数查看器)
需求:用户输入月份可以展示该月份的天数。
1、3、5、7、8、10、12月份是31天
2月份是闰年为29天,非闰年为28天。
4、6、9、11月份是30天。

总结
1、什么情况下会出现switch穿透现象?      
   case中没有写break。
2、switch穿透性能解决什么问题?
   存在多个case分支的功能代码是一样时,可以用穿透性把
   流程集中到同一处处理,这样可以简化代码。 

3、循环结构_for循环_求和_水仙花数

for循环
控制一段代码反复执行很多次。
格式:
for(初始化语句;循环条件;迭代语句){
      循环体语句(重复执行的代码);
}
示例
for(int i = 0;i < 3;i++){
      System.out.println("Hello World");
}

总结
1、for循环格式和执行流程是什么样的?
for(初始化语句;循环条件;迭代语句){
      循环体语句(重复执行的代码);
}

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

案例 求和
需求:求1-5之间的数据和,并把求和结果在控制台输出。
分析:
1、定义for循环使用其能够依次访问到:1、2、3、4、5。
for(int i = 1;i <= 5;i++){}
2、在循环外定义一个整数变量sum用来累加这些数据。
int sum = 0;
for(int i = 1;i <= 5;i++){
   sum += i;
}
3、循环结束后,输出求和变量即是结果。

总结
1、如何实现元素求1-5的和?
  使用循环控制输出1-5
  for(int i = 1; i <= 5; i++){}
2、在循环外定义变量sum累加数据。
  sum += i;
  
案例 求奇数和
需求:求1-10之间的奇数和,并把求和结果在控制台输出
方式一:  
1、定义for循环使用其能够依次访问到:1、2、3、4、5、...10。
2、在for循环中,通过if筛选出奇数
for(int i = 1; i <= 10; i++){
     if(i % 2 == 1){
         // i = 1 3 5 7...
     }
}
3、在循环外定义一个整数变量sum用来累加这些数据。

案例 求奇数和
需求:求1-10之间的奇数和,并把求和结果在控制台输出
方式二:
1、定义for循环使其能够依次访问到:1、3、5、7、9。
for(int i = 1;i <= 10; i+=2){}
2、在循环外定义一个整数变量sum用来累加这些数据。

总结
1、如何实现求奇数和
方式一:在for循环中,通过if筛选出奇数
for(int i = 1; i <= 10; i++){
     if(i % 2 == 1){
         // i = 1 3 5 7...
     }
}
方式二:直接使用for循环找出奇数。
for(int i = 1;i <= 10; i+=2){}

案例 水仙花数
需求:在控制台输出所有的"水仙花数",水仙花数必须满足如下2个要求:
1、水仙花数是一个三位数
2、水仙花数的个位、十位、百位的数字立方和等于原数
分析:
1、定义一个for循环从"100一直到999"。
2、每次访问到数据后,提取该数据的:个位、十位、百位数字。
3、使用if判断:个位、十位、百位的数字立方和是否等于原数,等于则输出该数据。
153  370  371  407
问题
1、如果还要知道水仙花数的个数怎么办?
    在循环外定义一个变量count用于记录水仙花数。
    每输出水仙花数时,让count++。
    
总结
1、如何找出水仙花数? 
    定义一个for循环从"100一直到999"。
    每次访问到数据后,提取该数据的:个位、十位、百位数字。
    看各个数的立方和是否等于原数,等于则输出原数据。   
2、如何计算出水仙花的个数?
    在循环外定义一个变量count用于记录水仙花数。
    每输出水仙花数时,让count++。

4、循环结构_while循环_珠穆朗玛峰案例

while循环格式与执行流程
初始化语句;
while(循环条件){
   循环体语句(被重复执行的代码);
   迭代语句;
}
示例
int i = 0;
while(i < 3){
   System.out.println("Hello World");
   i++;
}

总结
1、while循环的格式,执行流程是怎么样的?
初始化语句;
while(循环条件){
   循环体语句(被重复执行的代码);
   迭代语句;
}
示例
int i = 0;
while(i < 3){
   System.out.println("Hello World");
   i++;
}
2、什么时候用for循环,什么时候用while循环?
   功能上是完全一样的,for能解决的while也能解决,反之亦然。
   使用规范是:知道循环几次:使用for;不知道循环几次建议使用:while。
   
案例 珠穆朗玛峰(世界最高峰8848.86米)
   需求:
   世界最高山峰是珠穆朗玛峰(8848.86米=8848860毫米),假如我有一张足够大的纸,
   它的厚度是0.1毫米。请问,折叠多少,可以折成珠穆朗玛峰的高度。
   
   思路:这种不清楚要循环多少次的情况可以选择用while实现。
分析步骤
1、定义变量存储珠穆朗玛峰的高度、纸张的高度。
double peakHeight=8848860; //山峰高度
double paperThickness=0.1; //纸张厚度
2、使用while循环,循环条件是(纸张厚度<山峰高度),内部控制纸张折叠,每次叠一次,纸张厚度为原来两倍,循环外定义计数变量,每折叠一次让该变量+1
int count = 0;
while(paperThickness < peakHeight){
    paperThickness *= 2;
    count++;
}

总结
1、怎么解决此案例?
   定义变量存储珠穆朗玛峰的高度、纸张的高度。
   使用while循环,循环条件是(纸张厚度<山峰高度),内部控制纸张折叠,每次叠一次,纸张厚度为原来两倍,循环外定义计数变量,每折叠一次让该变量+1
2、for和while使用总结
   1、其实while能做的for都能实现
   2、但是如果一开始不知道循环次数的情况下,建议使用while循环解决更专业。    

5、循环结构_do_while循环_三种循环的总结

do-while循环
先执行再判断循环条件。
初始化语句:
do{
   循环体语句;
   迭代语句;
}while(循环条件);

int i = 0;
do{
  System.out.println("Hello world");
}while(i < 3);
do - while循环的特点:一定会先执行一次循环体。

三种循环的区别
for循环和while循环(先判断后执行)
do...while(第一次先执行后判断)
for和while的区别:
for循环和while循环的执行流程是一摸一样的。
如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
for循环中,控制循环的变量只在循环中可以使用。while循环中,控制循环的变量在循环后还可以继续使用。
int i = 0;
while(i < 3){
   System.out.println("Hello World");
   i++;
}
System.out.println(i);

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

6、死循环_循环嵌套_break_continue

死循环
一直循环的执行下去,如果没有干预不会停止下来。
写法
for(;;){
  System.out.println("Hello world");
}
// 经典做法
while(true){
  System.out.println("Hello world");
}

do{
  System.out.println("Hello world");
}while(true);

案例 密码验证
需求:系统密码是520,请用户不断的输入密码验证,验证不对输出密码错误,验证成功输出欢迎进入系统,并停止程序。
分析:
1、使用while死循环,让用户不断输入数据
2、与密码比对:验证不成功输出密码错误
3、验证成功输出欢迎进入系统,并使用break结束当前循环的执行。

总结
1、死循环可以怎么写?
for(;;){
}
while(true){
}

do{
}while(true);

循环嵌套
循环中又包含循环
for(int i = 0;i < 3;i++){
   for(int j = 0;j < 5;j++){
      System.out.println();
   }
}
嵌套循环的特点
外部循环每循环一次,内部循环全部执行完一次。

案例 循环嵌套
需求:在控制台使用*打印出4行5列的矩形
for(int i = 1;i <= 4; i++){
   System.out.println("*****");
}

跳转控制语句介绍
break:跳出并结束当前所在循环的执行。
continue:用于跳出当前循环的当次执行,进入下一次循环。

注意事项
break:只能用于结束所在循环,或者结束所在switch分支的执行。
continue:只能在循环中进行使用。

7、案例技术_Random类_猜数字游戏

Random随机数技术
作用:用于在程序中获取随机数的技术。
使用步骤:
1、导包:告诉程序去JDK的哪个包中找随机数技术
2、写一行代码代表得到随机数对象
3、调用随机数的功能获取0-9的随机数
注意:
nextInt(n)功能只能生成:0至n-1之间的随机数,不包含n。

Random生成随机数的特点
nextInt(n)功能只能生成:0-(n-1)之间的随机数。
Random生成区间随机数的技巧:减加法。
例如:要生成1-10之间的随机数,程序怎么实现?
1-10 ---> -1 --->(0-9)+1
Random r = new Random();
int number = r.nextInt(10) + 1;

总结
1、Random随机数类生成需要几步,具体是什么样的?
   导包:import java.util.Random;
   Random r = new Random();
   int number = r.nextInt(10);
2、Random随机数如何生成65 - 91之间的随机数?
   65 - 91 => (0-26) + 65
   int number = r.nextInt(27) + 65;
   
案例 猜数字游戏
需求:
随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。
分析:   
1、随机生成一个1-100之间的数据
2、使用死循环让用户不断提示用户猜测,猜大提示过大,猜小提示过小,猜中结束游戏。
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到