在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。
流程控制语句介绍
通过一些语句,来控制程序的【执行流程】
3.1 流程控制语句分类(了解)
顺序结构
分支结构(if, switch)
循环结构(for, while, do…while)
3.2 顺序结构(了解)
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,
从上到下,从左到右
程序中大多数的代码都是这样执行的。流程图:
3.3 分支结构之if语句
3.3.1 if语句格式1(理解)
格式:
if (关系表达式) {
语句体;
}
执行流程:
①首先计算关系表达式的值
②如果关系表达式的值为true就执行语句体
③如果关系表达式的值为false就不执行语句体
④继续执行后面的语句内容
流程图:
public class IfDemo { public static void main(String[] args) { System.out.println("开始"); // 如果年龄大于18岁, 就可以上网吧 int age = 17; if(age >= 18){ // int a = 10; System.out.println("可以上网吧"); } System.out.println("结束"); } }
if语句注意事项
1.if语句所控制的语句体,如果是一条语句,大括号可以省略不写
但是不建议
2.if语句的小括号后面,没有分号
格式:
if (关系表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
①首先计算关系表达式的值
②如果关系表达式的值为true就执行语句体1
③如果关系表达式的值为false就执行语句体2
④继续执行后面的语句内容
任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数。
public class Demo2If { public static void main(String[] args) { // 程序判断一个数, 是奇数还是偶数 int num = 9; if(num % 2 == 0){ System.out.println("偶数"); }else{ System.out.println("奇数"); } } }
格式:
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
执行流程:
①首先计算关系表达式1的值
②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
④…
⑤如果没有任何关系表达式为true,就执行语句体n+1。
定义一个在0~100之间的变量a, 90~100优秀,80~89良好,70~79中等,60~69及格,0~59请努力加油!
public class Demo3If { public static void main(String[] args){ int score = 65; if(score >= 90 && score <= 100){ System.out.println("优秀"); }else if (score >= 80 && score <= 89){ System.out.println("良好"); }else if (score >= 70 && score <= 79){ System.out.println("中等"); }else if (score >= 60 && score <= 69){ System.out.println("及格"); }else if (score >= 0 && score <= 59){ System.out.println("请努力加油"); }else{ System.out.println("成绩有误!"); } } }
分析:
①小明的考试成绩未知,可以使用键盘录入的方式获取值,判断学生录入成绩是否在合法的范围内
②由于奖励种类较多,属于多种判断,采用if...else...if格式实现
③为每种判断设置对应的条件
④为每种判断设置对应的奖励
import java.util.Scanner; public class Test { /* 需求:键盘录入学生考试成绩, 根据成绩程序给出不同的奖励。 95~100分 : 自行车一辆 90~94分 : 游乐场一次 80~89分 : 变形金刚一个 80分以下 : 挨顿揍, 这座城市又多了一个伤心的人~ 步骤: 1. 使用Scanner录入考试成绩 2. 判断成绩是否在合法范围内 0~100 非法的话, 给出错误提示 3. 在合法的语句块中判断成绩范围符合哪一个奖励 并给出对应的奖励. */ public static void main(String[] args){ // 1. 使用Scanner录入考试成绩 Scanner sc = new Scanner(System.in); System.out.println("请输入您的成绩:"); int score = sc.nextInt(); // 2. 判断成绩是否在合法范围内 0~100 if(score >=0 && score <= 100){ // 合法成绩 // 3. 在合法的语句块中判断成绩范围符合哪一个奖励 if(score >= 95 && score <= 100){ System.out.println("自行车一辆"); }else if(score >= 90 && score <= 94){ System.out.println("游乐场一次"); }else if(score >= 80 && score <= 89){ System.out.println("变形金刚一个"); }else { System.out.println("挨顿揍, 这座城市又多了一个伤心的人~"); } }else{ // 非法的话, 给出错误提示 System.out.println("您的成绩输入有误!"); } } }
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就会结 束。
-
public class Demo1Switch { /* 1. 首先计算表达式的值。 2. 依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句 在执行的过程中,遇到break就会结束。 3. 如果所有的case后面的值和表达式的值都不匹配 就会执行default里面的语句体,然后程序结束掉。 需求: 根据week变量记录的数值, 程序输入对应的星期 例如: int week = 1; 星期一 */ public static void main(String[] args){ int week = 100; 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; } } }
//您的数据有误
注意事项:
1.case给出的值不允许重复
2.case后面的值只能是常量,不能是变量
-
需求:键盘录入星期数,显示今天的减肥活动
周一:跑步
周二:游泳
周三:慢走
周四:动感单车
周五:拳击
周六:爬山
周日:好好吃一顿
import java.util.Scanner; public class TestSwitch { /* 需求:键盘录入星期数,显示今天的减肥活动。 周一:跑步 周二:游泳 周三:慢走 周四:动感单车 周五:拳击 周六:爬山 周日:好好吃一顿 分析: 1. 键盘录入星期数据,使用变量接收 2. 多情况判断,采用switch语句实现 3. 在不同的case中,输出对应的减肥计划 */ public static void main(String[] args){ // 1. 键盘录入星期数据,使用变量接收 Scanner sc = new Scanner(System.in); System.out.println("请输入"); int week = sc.nextInt(); // 2. 多情况判断,采用switch语句实现 switch(week){ // 3. 在不同的case中,输出对应的减肥计划 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; } } }
import java.util.Scanner; public class Demo2Switch { /* 需求: 键盘录入星期数,输出工作日、休息日 (1-5)工作日,(6-7)休息日 case穿透是如何产生的? 如果switch语句中,case省略了break语句, 就会开始case穿透. 现象: 当开始case穿透,后续的case就不会具有匹配效果,内部的语句都会执行 直到看见break,或者将整体switch语句执行完毕,才会结束。 */ public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("请输入星期数:"); int week = sc.nextInt(); switch(week){ case 1: case 2: case 3: case 4: case 5: System.out.println("工作日"); break; case 6: case 7: System.out.println("休息日"); break; default: System.out.println("您的输入有误"); break; } } }
应用场景:当发现switch中,多个case给出的语句体出现了重复的,就可以考虑使用case穿透来优化代码