流程控制
- 概念:控制代码执行的顺序
- 分类:
顺序结构:代码从上往下,从左往右依次执行(默认执行)
分支结构:在代码的执行过程中,可能有不同的运行结果;根据条件的不同,选择执行其中一种结果。
特点:代码写的多,程序运行的少
循环结构:在程序中有某些代码需要反复执行,可以通过某种格式来完成代码的简化。
特点:代码写的少,运行的次数多
分支结构
- 概念:在代码的执行过程中,可能有不同的运行结果;根据条件的不同,选择执行 其中一种结果。
特点:代码写的多,程序运行的少
- 分类:
if语句
if
if…else
if …else if…else if…else
switch语句
if语句的第一种格式
- 格式:
if(条件表达式){
语句体;
}
- 说明:
条件表达式:布尔表达式,运算的结果要么为真,要么为假
语句体:可以是任意操作
- 执行流程:
(1)先执行条件表达式,结果要么为真,要么为假
(2)如果结果为真,执行语句体
(3)如果结果为假,不执行语句体
- 注意事项:
(1)语句体可以是任意操作,可以是多行代码
(2)如果语句体只有一句,可以将大括号省略;如果语句体有多句,不能省略大括号
import java.util.Scanner;
class Demo01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入您的年龄:");
int age = sc.nextInt();
//判断条件表达式
if(age >= 18){
//表达式为真,执行
//为假,不执行
System.out.println("你可以观看此影片!");
System.out.println("你可以观看此影片!");
System.out.println("你可以观看此影片!");
}
//if语句结束之后,正常执行
System.out.println("欢迎您的下次观看!");
}
}
if语句的第二种格式
- 格式:
if(布尔表达式){
语句体1;
}else{
语句体2;
}
- 流程:
(1)先执行布尔表达式
(2)如果结果为真,执行语句体1,结束整个if语句
(3)如果结果为假,执行语句体2,结束整个if语句
import java.util.Scanner;
class Demo02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入您的年龄:");
int age = sc.nextInt();
//判断条件表达式
if(age >= 18){
//如果结果为真,执行
System.out.println("您可以进入该场所!");
}else{
//如果结果为假,执行
System.out.println("请有大人陪同!!!");
}
//if结束后,正常执行
System.out.println("欢迎下次光临");
}
}
if语句的第三种格式
- 格式:
if(布尔表达式1){
语句体1;
}else if(布尔表达式2){
语句体2;
}else if(布尔表达式3){
语句体3;
}
…
else{
语句体n;
}
- 执行流程:
(1)布尔表达式1,结果为真或者为假
(2)如果表达式1的结果为真,执行语句体1,结束整个if语句
(3)如果表达式1的结果为假,不执行语句体1,执行布尔表达式2
(4)表达式2结果为真,执行语句体2,结束整个if语句
(5)表达式2结果为假,不执行语句体2,执行布尔表达式3
(6)同上,依次判断执行即可
(7)如果前面的表达式结果都为假,执行else中的语句体n
- 注意事项:
(1)有没有可能执行两条或者两条以上的语句体?
不可能,因为执行其中一个之后,就直接结束
(2)有没有可能语句体一句都不执行?
如果加上else,一定会执行其中一句。
如果不加else,可能一句也无法执行。
import java.util.Scanner;
class Demo03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个整数:");
int x = sc.nextInt();
//先从上往下执行
//如果表达式为真,就执行语句体,结束if语句
//如果表达式为假,就不执行语句体,执行后面的表达式
//如果表达式结果全都为假,执行else中的语句体
if(x == 1){
System.out.println("今天星期一");
}else if(x == 2){
System.out.println("今天星期二");
}else if(x == 3){
System.out.println("今天星期三");
}else{
System.out.println("今天放假了!!!");
}
}
}
switch语句
- 格式:
switch(表达式){
case 常量1:
语句体1;
break;
case 常量2:
语句体2;
break;
case 常量3:
语句体3;
break;
…
default :
语句体n;
}
- 执行流程:
(1)先获取表达式的值
(2)将获取的值和常量1匹配,如果匹配,就执行语句体1,执行break,结束整个switch 语句
(3)如果获取的值和常量1不匹配,不执行语句体1,和常量2匹配
(4)如果能匹配上,就执行语句体2,执行break,结束整个switch语句
(5)如果和常量2也不能匹配,同上,依次往下执行匹配
(6)如果每一个常量都不能匹配,就执行default中的语句体n
import java.util.Scanner;
class Demo04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个整数:");
int x = sc.nextInt();
//获取小括号中的值
//从上往下依次匹配,相等就执行,执行之后结束
//如果不相等,就往下继续匹配
//如果每一个常量都不相等,就执行默认语句体
switch(x){
case 1:
System.out.println("星期一!");
break;
case 2:
System.out.println("星期二!");
break;
case 3:
System.out.println("星期三!");
break;
default:
System.out.println("放假了!");
}
}
}
switch语句的注意事项
- switch小括号中的表达式结果必须是以下类型的结果:
byte char short int String 枚举
- case后面的值必须是常量,不能定义变量
- 一般情况,每一个语句体后面都要跟上break;
如果不跟,发生case穿透
- default语句可以加也可以不加
如果不加,有可能语句体一句无法执行
如果加上,至少能执行一句
- default语句可以放在switch语句中的任何位置
不管放在哪一个位置,都是最后去匹配
如果将default语句放在前面或者中间位置,需要加上break防止发生穿透
- switch语句结束的条件:
(1)执行break;
(2)碰到右大括号