程序流程控制(Java)
程序流程控制(Java)
文章目录
- 程序流程控制(Java)
- 分支结构
- if
- switch 分支
- switch 的注意事项
- switch 的穿透性
- 循环结构
- for 循环
- for 循环案例1
程序执行的几种常见形式
分支结构
if
if 分支
- 根据判定的结果(真或假)决定执行某个分支的代码
if 分支的作用
- 判断心跳是否正常
- 判断是否有足够的余额转红包
if 分支有三种格式
if 第一种格式
执行流程
- 首先判断条件表达式的结果,如果为 true 执行语句体,为 false 就不执行语句体。
注意事项
- if 语句中,如果大括号控制的只有一行代码,则大括号可以省略不写。
if 第二种格式
执行流程
- 首先判断条件表达式的结果,如果为 true 执行语句体1,为 false 就执行语句体2。
if 第三种格式
执行流程
- 先判断条件1的值,如果为 true 则执行语句体1,分支结束;如果为 false 则判断条件2的值
- 如果值为 true 就执行语句体2,分支结束;如果为 false 则判断条件3的值
- …
- 如果没有任何条件为 true,就执行 else 分支的语句体 n+1。
switch 分支
switch 分支
- 也是匹配条件去执行分支,==适合做值匹配的分支选择,结构清晰,格式良好**
执行流程
- 先执行表达式的值,拿着这个值去与 case 后的值进行匹配。
- 匹配哪个 case 的值为 true 就执行哪个 case,遇到break就跳出 switch 分支。
- 如果 case 后的值都不匹配则执行 default 代码。
switch 案例
- 周一:埋头苦干,解决bug
- 周二:请求大牛程序员帮忙
- 周三:今晚啤酒、龙虾、小烧烤
- 周四:主动帮助新来的女程序员解决 bug
- 周五:今晚吃鸡
- 周六:与王婆介绍的小芳相亲
- 周天:郁郁寡欢、准备上班。
// 周一:埋头苦干,解决bug
// 周二:请求大牛程序员帮忙
// 周三:今晚啤酒、龙虾、小烧烤
// 周四:主动帮助新来的女程序员解决 bug
// 周五:今晚吃鸡
// 周六:与王婆介绍的小芳相亲
// 周天:郁郁寡欢、准备上班。
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("数据有误!");
}
- if、switch 分支各自适合做什么业务场景?
- if 其实在功能上远远强大与 switch。
- if 适合做:区间匹配。
- switch 适合做:值匹配的分支选择、代码优雅。
switch 的注意事项
switch 分支注意事项:
- 表达式类型只能是 byte、short、int、char,JDK5 开始支持枚举,JDK7 开始支持 String、不支持 double、float、long。
- case 给出的值不允许重复,且只能是字面量,不能是变量。
- 不要忘记写 break,否则会出现穿透现象。
switch 的穿透性
switch 的穿透性
- 如果代码执行到没有写 break 的 case 块,执行完后将直接进入下一个 case 块执行代码(而且不会进行任何匹配),直到遇到 break 才跳出分支,这就是 switch 的穿透性。
switch 穿透性案例(月份天数查看器)
// 需求:用户输入月份可以展示该月份的天数。
// 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("数据有误!");
}
- 什么情况下会出现 switch 穿透现象?
- case 中没有写 break。
- switch 穿透性能解决什么问题?
- 存在多个 case 分支的功能代码是一样时,可以用穿透性把流程集中到同一处处理,这样可以简化代码。
循环结构
for 循环
for 循环
- 控制一段代码反复执行很多次。
for 循环案例详细流程说明
// 输出3次 HelloWorld
for (int i = 0; i < 3; i++){
System.out.println("Hello World");
}
执行的流程:
- 循环一开始,执行 int i = 0 一次
- 然后判断循环条件:0 < 3 返回 true,进入到循环体中执行输出:Hello World,然后执行迭代语句 i++,此时 i=1 了。
- 然后判断循环条件:1 < 3 返回 true,进入到循环体中执行输出:Hello World,然后执行迭代语句 i++,此时 i=2 了。
- 然后判断循环语句:2 < 3 返回 true,进入到循环体中执行输出:Hello World,然后执行迭代语句 i++,此时 i=3 了。
- 然后判断循环条件:3 < 3 返回 false,循环立即结束!
// 目标:学会使用 for 循环,并理解它的执行流程。
// 需求:输出3次 HelloWorld
for (int i = 0; i < 3; i++){
System.out.println("Hello World");
}
System.out.println("-------------------");
for (int i = 0; i < 5; i++){
System.out.println("Hello World");
}
System.out.println("-------------------");
for (int i = 1; i < 5; i++){
System.out.println("Hello World");
}
System.out.println("-------------------");
for (int i = 1; i <= 5; i++){
System.out.println("Hello World");
}
System.out.println("-------------------");
for (int i = 1; i <= 5; i+=2){
System.out.println("Hello World");
}
for 循环案例1
案例:求和
需求:求 1-5 之间的数据和,并把求和结果在控制台输出。
分析
- 定义 for 循环,使其能够产生:1、2、3、4、5。
- 在循环外定义一个整数变量 sum 用于求和,循环每产生一个数,就累加到 sum 中去
- 循环结束后,输出求和变量即是结果。
// 需求:计算1-5的和
// 1. 定义一个整数变量用于累加数据求和
int sum = 0;
// 2. 定义一个 for 循环找到 1 2 3 4 5
for (int i = 1; i <= 5; i++){
// i = 1 2 3 4 5
// 3. 把循环的数据累加给 sum 变量
/**
等价于:sum = sum + i
i == 1 sum = 0 + 1
i == 2 sum = 1 + 2
i == 3 sum = 3 + 3
i == 4 sum = 6 + 4
i == 5 sum = 10 + 5
*/
sum += i;
}
System.out.println("1-5的和是:" + sum);
如何实现元素求 1-5 的和?
- 使用循环控制输出 1-5
for (int i = 1; i <= 5; i++) { }
- 在循坏外定义变量 sum 累加数据。
sum += i;