程序控制流程
顺序控制流程一般分为三种:循序结构、分支结构、循环结构
一、循序结构
不加任何控制,代码从main方法开始自上而下
二、分支结构
1.if分支
对条件进行判断,判断结果值可能有两个值true或者false,然后根据条件判断的结果来决定执行代码。
-
if的第一种形式
if (条件表达式){ 代码; } double temp = 38; if(temp>37){ System.out.println("这个人体温不正常"); } System.out.println("代码剩余部分");
-
if的第二种形式
if(条件表达式){ 代码; }else{ 代码2; } public static void main(String[] args){ System.out.println("我要开始发红包了"); double balance =88; if (balance>90){ balance-=90; System.out.println("你的余额是" +balance); }else{ System.out.println("余额不足"); } System.out.println("继续执行main方法"); }
-
if的第三种形式
if(条件表达式1){ 代码1; }else if(条件表达式2){ 代码2; }else if(条件表达式3){ 代码3; }else{ 代码n; // 需求3:某个公司有一个绩效系统,根据员工的打分输出对应的绩效级别。[0,60) D [60,80) C [80,90) B [90,100] A public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入员工打分成绩"); double score = sc.nextDouble(); // 需求3:某个公司有一个绩效系统,根据员工的打分输出对应的绩效级别。 [0,60) D [60,80) C [80,90) B [90,100] A if (score >= 0 && score < 60) { System.out.println("员工绩效级别:D"); } else if (score < 80) { System.out.println("员工绩效级别:C"); } else if (score < 90) { System.out.println("员工绩效级别:B"); } else if (score <= 100) { System.out.println("员工绩效级别:A"); } else { System.out.println("你输入的成绩不合理"); } System.out.println("继续执行main方法"); }
条件1为真执行代码1,然后if语句结束否则执行条件2,如果为真执行3,然年if语句结束判断后续条件,如果前面添加都为false,执行else下面代码。
2.switch分支
switch(表达式){
case值1;
执行代码;
break;
....
case值n-1;
执行代码;
break;
default:
执行代码n;
}
- 先执行表达式的值,再拿着这个值与case的值去匹配。
- 与其中相匹配的case后的值为true就执行相应代码,遇到break就跳出相应分支。
- 如果与所有case的值都不匹配就执行default块的代码。
switch的注意事项
- 他的表达类型只能是byte、short、int、char;jdk5开始支持枚举,jdk1.7、java7开始支持String,不支持double、float等。
- case给出的值不允许重复,而且只能是字面量,不能是变量。
- case执行时一定要使用break,否则会一直执行直接穿透下一个case语句执行直到遇到下一个break。
- case后面的值只能是字面量不能是变量。(字面量是一个固定的值无变化)
2.1switch分支新特性
- 箭头表达式(可以不用break语句)
public static void main(String[] args) {
// 先输入年份,在输入一个月份,返回这个月多少天
// 31 30 29 28 31 1,3,5,7,8,10,12 30 4, 6 , 9, 11 2 闰年
29天 平年 28天
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个年份:");
int year = sc.nextInt();
System.out.println("请输入一个月份:");
int month = sc.nextInt();
// int temp = 12;
// switch 新特性 -> 箭头表达式
int days = 0;
switch (month) {
case 1, 3, 5, 7, 8, 10, 12 -> days = 31;
case 4, 6, 9, 11 -> days = 30;
case 2 -> {
// 判断 year 是否是闰年
if (year % 4 == 0 && year % 100 != 0 || year % 400 ==
0) {
days = 29;
} else {
days = 28;
}
}
default -> days = -1;
}
if (days == -1) {
System.out.println("输入的月份不正确");
} else {
System.out.println("这个月" + days + "天");
}
// System.out.println(days == -1 ? "输入的月份不正确" :
"这个月" + days + "天");
}
- yield大多时候,在switch表达式内部,我们会返回简单的值,但是如果需要复杂语句也可以写很多语句放在{…}然后用yield返回一个值作为switch语句的返回值。
import java.util.Scanner;
pubilc class Main{
public static void main(String[] args){
Scanner input= new Scanner(System.in);
System.out.println("请输入成绩");
int score = input.nextInt();
String level=switch(score/10){
case 10,9->{
String result="A,你是非常棒的";
yield result;
}
case 8->"B";
case 7->"C";
case 6->"D";
default ->"E";
};
System.out.println("你的成绩等级为:"+level);
}
}
//case匹配多个值;把相同逻辑的case放在一起,最后一个case写逻辑即可,在Java12中,可以使用多个逗号来分开多个值。
3.if、switch如何选择
如果是对一个范围进行判断,建议使用if分支结构
如果是一个一个的值比较的时候,建议使用switch分支结构
等级为:"+level);
}
}
//case匹配多个值;把相同逻辑的case放在一起,最后一个case写逻辑即可,在Java12中,可以使用多个逗号来分开多个值。
##### 3.if、switch如何选择
> 如果是对一个范围进行判断,建议使用if分支结构
>
> 如果是一个一个的值比较的时候,建议使用switch分支结构