程序流程控制

01 程序流程控制课程介绍

顺序结构 —>> 程序默认流程
分支结构 —>> If、switch
循环结构 —>> for、while、do…while

02 分支结构:if、switch、switch穿透性

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

//格式1 if(条件表达式){代码...}
//心跳60 - 100之间是正常的,否则提示进一步检查
int heartBeat = 90;
if(heartBeat < 60 || heartBeat > 100) {
	System.out.println("您的心跳数据是:" + heartBeat + ",您可能需要进一步检查!");
}
System.out.println("检查结束");

//格式2 if(条件表达式){代码...}else{代码...}
//发红包
double money = 1;
//发送一个1314;
if(money >= 1314) {
	System.out.println("您当前发送红包成功~~~");
}else {
	System.out.println("您自己都没钱,就别发了~~~");
}

//格式3 if(条件表达式){代码...}else if(条件表达式){代码...}} ...else{代码...}}
//绩效系统:0-60 C 60-80 B 80-90 A 90-100 A+
int score = 99;
if(score >= 0 && score < 60) {
	System.out.println("您本月的绩效是:C");
}else if(score >= 60 && score < 80) {
	System.out.println("您本月的绩效是:B");
}else if(score >= 80 && score < 90) {
	System.out.println("您本月的绩效是:A");
}else {
	System.out.println("您本月的绩效是:A+");
}

2、switch分支的格式、执行流程是怎么样的?
switch(表达式){
case 值1:
执行代码1;
break;
case 值2:
执行代码2;
break;

case 值n-1:
执行代码n-1;
break;
default:
执行代码n;
// break;
}
3、if、switch分支各自适合做什么业务场景?
if其实在功能上远远强大于switch
if适合做区间匹配
switch适合做:值匹配的分支选择、代码优雅

String weekday = "周八";
switch (weekday){
    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("数据有误!");
        break;
}

4、switch分支注意事项

  • 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long
  • case给出的值不允许重复,且只能是字面量,不能是变量
  • 不要忘记写break,否则会出现穿透现象
    5、什么情况下会出现switch穿透现象?
    case中没有写break
    6、switch穿透性能解决什么问题?
    存在多个case分支的功能代码是一样时,可以用穿透性把流程集中到同一处处理,这样可以简化代码
//        需求:用户输入月份可以展示该月份的天数。
//        1、3 、5、 7 、 8、 10、 12月份是 31天
//        2月份是闰年为29天、非闰年为28天。
//        4 、6 、9、 11月份 是30天
        int month = 7;
        switch (month){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                System.out.println(month + "月是31天!");
                break;
            case 2:
                System.out.println(month + "月闰年为29天,非闰年为28天!");
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                System.out.println(month + "月是30天!");
                break;
            default:
                System.out.println("数据有误!");
        }

03 循环结构:for循环、求和、水仙花数

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

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

2、如何实现元素求1-5的和?

// 需求:求1-5之间的数据和,并把求和结果在控制台输出
int sum = 0;
// 使用循环控制输出1-5
for (int i = 0; i <= 5; i++) {
	// 在循环外定义变量sum累加数据
    sum += i;
}
// 控制台输出结果
System.out.println("1-5之间的数据和是:" + sum);

3、如何实现求奇数和?
方式一:在for循环中,通过if筛选出奇数

// 需求:求1-10之间的奇数和,并把求和结果在控制台输出。
int sum = 0;
for (int i = 1; i <= 10; i++) {
    if (i % 2 == 1) sum += i;
}
System.out.println("1-10之间的奇数和是:" + sum);

方式二:直接使用for循环找出奇数

int sum1 = 0;
for (int i = 1; i <= 10; i+=2) {
    sum1 += i;
}
System.out.println("1-10之间的奇数和是:" + sum1);

4、如何找出水仙花数?

// 需求:在控制台输出所有的“水仙花数”
// 定义一个for循环从“100一直到999”
for (int i = 100; i <= 999; i++) {
    // 每次访问到数据后,提取该数据的:个位、十位、百位数字
    int ge = i % 10;
    int shi = i / 10 % 10;
    int bai = i / 100;
    // 看各个数的立方和是否等于原数,等于则输出原数据
    if((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
        System.out.print(i + "\t");
    }
}

5、 如何计算出水仙花的个数?
每输出水仙花数时,让count++

// 需求:在控制台输出所有的“水仙花数”
// 在循环外定义一个变量count用于记录水仙花数
int count = 0
// 定义一个for循环从“100一直到999”
for (int i = 100; i <= 999; i++) {
    // 每次访问到数据后,提取该数据的:个位、十位、百位数字
    int ge = i % 10;
    int shi = i / 10 % 10;
    int bai = i / 100;
    // 看各个数的立方和是否等于原数,等于则输出原数据
    if((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
        System.out.print(i + "\t");
        // 每输出水仙花数时,让count++
        count++;
    }
}
System.out.println();
System.out.println("水仙花的个数是:" + count);

04 循环结构:while循环、珠穆朗玛峰案例

1、while循环的格式,执行流程是怎么样的?
初始化语句;
while (循环条件) {
循环体语句;
迭代语句;
}

//输出三次Hello World
int i = 0;
while (i < 3) {
	System.out.println("Hello World");
	 i++;
}
System.out.println("------------------");
//死循环
int j = 0;
while (j < 3) {
	System.out.println("Hello World");
}

2、什么时候用for循环,什么时候用while循环?
功能上是完全一样的,for能解决的while也能解决,反之亦然
使用规范是:
知道循环几次:使用for;
不知道循环几次建议使用:while
3、怎么解决珠穆朗玛峰案例?

// 需求:世界最高山峰是珠穆朗玛峰(8848.86米=8848860毫米)
// 假如我有一张足够大的纸,它的厚度是0.1毫米。
// 请问,折叠多少次,可以折成珠穆朗玛峰的高度?
// 定义变量存储珠穆朗玛峰的高度、纸张的高度
double peakHeight = 8848860;
double paperThickness = 0.1;
// 循环外定义计数变量
int count = 0;
// 使用while循环,循环条件是(纸张厚度<山峰高度)
while(paperThickness < peakHeight){
	// 内部控制纸张折叠,每折叠一次,纸张厚度为原来两倍
    paperThickness *= 2;
    // 每折叠依次让该变量+1
    count++;
}
System.out.println("折叠的次数:" + count);
System.out.println("纸张的最终厚度:" + paperThickness);

4、for和while使用总结
其实while能做的for都能实现
但是如果一开始不知道循环次数的情况下,建议使用while循环解决更专业

05 循环结构:do-while循环,三种循环的总结

1、do-while循环的格式,执行流程是怎么样的?
先执行再判断循环条件
初始化语句;
do {
循环体语句;
迭代语句;
} while (循环条件);

int i = 0;
do {     
	System.out.println(“Hello World!");       
	i++;
} while( i < 3);

do-while循环的特点:一定会先执行一次循环体
2、三种循环的区别
for循环 和 while循环(先判断后执行)
do…while (第一次先执行后判断)
3、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); //报错,找不到变量i

06 死循环、循环嵌套、break、continue

1、死循环可以怎么写?

for(;;) {
}
//经典写法
while(true) {
}
do {
} while (true);

2、密码验证案例实现

package com.itheima.type;

import java.util.Scanner;

public class TypeDemo1 {
    public static void main(String[] args) {
        // 需求:系统密码是520,请用户不断的输入密码验证,验证不对输出
        // 密码错误,验证成功输出欢迎进入系统,并停止程序
        int okPassword = 520;
        Scanner sc = new Scanner(System.in);
        // 使用while死循环,让用户不断输入数据
        while(true){
            System.out.println("请输入正确的密码:");
            int password = sc.nextInt();
            if(password == okPassword){
                // 验证成功输出欢迎进入系统
                System.out.println("密码正确,欢迎进入系统!");
                // 并使用break结束当前循环的执行
                break;
            }else{
                // 与密码比对:验证不成功输出密码错误
                System.out.println("密码错误!");
            }
        }
    }
}

javabigdecimal区间判断_java


3、循环嵌套

package com.itheima.type;

public class TypeDemo1 {
    public static void main(String[] args) {
        // 需求:在控制台使用 * 打印出4行5列的矩形
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

4、跳转关键字:break、continue
break : 跳出并结束当前所在循环的执行
continue: 用于跳出当前循环的当次执行,进入下一次循环
break : 只能用于结束所在循环, 或者结束所在switch分支的执行
continue : 只能在循环中进行使用

package com.itheima.type;

public class TypeDemo1 {
    public static void main(String[] args) {
        // 罚做5天家务,第三天心软了,就不用洗了
        for (int i = 0; i < 5; i++) {
            System.out.println("洗碗干活中~~~");
            if(i == 2){
                break;
            }
        }
        System.out.println("------------------------");
        // 罚做5天家务,第三天心软了,就不用洗了,仍然不解恨,第4、5天继续洗
        for (int i = 0; i < 5; i++) {
            if(i == 2){
                continue;
            }
            System.out.println("洗碗干活中~~~" + i);
        }
    }
}

07 案例技术:Random类,猜数游戏

1、Random随机数类生成需要几步,具体是什么样的?

package com.itheima.type;
// 1、导包:告诉程序去JDK的哪个包中找随机数技术
import java.util.Random;

public class TypeDemo1 {
    public static void main(String[] args) {
        // 2、写一行代码代表得到随机数对象
        Random r = new Random();
        for (int i = 0; i < 10; i++) {
            // 3、调用随机数的功能获取0-9的随机数
            int number = r.nextInt(10) + 1;
            System.out.println("随机生成了:" + number);
        }
    }
}

2、Random随机数如何生成 65 – 91之间的随机数?
65 – 91 ---->> (0 - 26)+ 65 ---->> 27 + 65

int number = r.nextInt(27) + 65;

3、猜数字游戏

package com.itheima.type;

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

public class TypeDemo1 {
    public static void main(String[] args) {
        // 需求:随机生成一个1-100之间的数据
        // 提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏
        Random r = new Random();
        int data = r.nextInt(100) + 1;
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入您猜测的数据(1-100):");
            int guessData = sc.nextInt();
            if(guessData > data) System.out.println("您猜测的数据大了!");
            else if(guessData < data) System.out.println("您猜测的数据小了!");
            else{
                System.out.println("恭喜您,猜中了,可以去买单了~~~");
                break;
            }
        }
    }
}

javabigdecimal区间判断_后端_02