目录
1.案例(1):使用if else 和 && 短路与逻辑运算符,打印三个数的中间值。
2.案例(2):使用Scanner类,输入3个数值,并按从大到小的顺序打印出来。
1.案例(3):输入成绩,使用switch case 判断成绩是否及格
2.案例(4):利用switch case 不遇到break可以一直执行到结束的特性,打印输入的年月日是当年的第几天。
一、流程控制的三种结构
1.顺序结构
当执行完一条语句后,继续执行下一条语句,按顺序执行。
2.分支结构
按照给出的条件,判断是否执行内部语句。
3.循环结构
符合条件时,重复执行内部语句。
二、分支结构:if else
1.案例(1):使用if else 和 && 短路与逻辑运算符,打印三个数的中间值。
class FlowControl{
public static void main(String[] args) {
//使用if else找出三个数的中间值
int num1 = 1111;
int num2 = 618;
int num3 = 1024;
int max;
if (num1 >= num2 && num1 <= num3){
max = num1; //当num1大于等于其他num值时,将num1赋值给max。
}else if(num2 >=num1 && num2 <= num3){
max = num2; //当num2大于等于其他num值时,将num2赋值给max。
}else{
max = num3; //以上都不成立时,将num3赋值给max。
}
System.out.println("三个数的中间值为:" + max);
}
}
输出结果是num3的值1024
结论:使用&&短路一次完成num是否为中间值的条件判断,相比使用if else的嵌套,代码更为简洁。
2.案例(2):使用Scanner类,输入3个数值,并按从大到小的顺序打印出来。
import java.util.Scanner; //导入Scanner类
class FlowControl{
public static void main(String[] args) {
Scanner receiverNum = new Scanner(System.in); //创建一个名为receiverNum的Scanner类的对象
System.out.println("请输入三个数:");
int num1 = receiverNum.nextInt(); //接收输入的第一个数
int num2 = receiverNum.nextInt(); //接收输入的第一个数
int num3 = receiverNum.nextInt(); //接收输入的第一个数
if (num1 >= num2){
if (num3 >= num1){ //使用if嵌套做二次分支
System.out.println(num3 + "," + num1 + "," + num2);
}else if(num3 <= num2){
System.out.println(num1 + "," + num2 + "," + num3);
}else{
System.out.println(num1 + "," + num3 + "," + num2);
}
}else{
if (num3 >= num2){
System.out.println(num3 + "," + num2 + "," + num1);
}else if (num3 <= num1){
System.out.println(num2 + "," + num1 + "," + num3);
}else{
System.out.println(num2 + "," + num3 + "," + num1);
}
}
}
}
输出结果:键盘输入了三个数,分别按从大到小的顺序输出了。
结论:在需要对多个数(3个及以上)做排序时,使用if嵌套可以简化条件判断语句,但是不建议多重嵌套使用,会大幅降低代码的可读性。
三、分支结构:switch case
1.案例(3):输入成绩,使用switch case 判断成绩是否及格
//使用switch case 判断成绩是否及格
Scanner receiverNum = new Scanner(System.in); //创建一个名为receiverNum的Scanner类的对象
System.out.println("请输入成绩(0-100):");
int score = receiverNum.nextInt(); //输入分数
switch (score/10){
case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
System.out.print("不及格"); //匹配到case后会顺序执行后续case,直到break。
break;
case 6 :
case 7 :
case 8 :
case 9 :
case 10 :
System.out.print("及格");
break;
}
输出结果:当输入成绩为55时,打印不及格,输入99时,打印及格。
结论:switch case只能用一个值来判断执行的下游分支流程,而不能是一个范围(布尔类型)匹配完成后,程序会继续往后执行,直至break语句或执行完全部内部语句。
2.案例(4):利用switch case 不遇到break可以一直执行到结束的特性,打印输入的年月日是当年的第几天。
//使用switch case 打印出输入的年月日是当年的第几天
Scanner receiverNum = new Scanner(System.in);
System.out.println("请输入年:");
int year = receiverNum.nextInt(); //接收年份
System.out.println("请输入月:");
int month = receiverNum.nextInt(); //接收月份
System.out.println("请输入日:");
int day = receiverNum.nextInt(); //接收日期
int sumDay =0; //定义当年第几天数
int febDay ; //定义febDay代指二月的天数
//判断是否为闰年并为febDay赋值相应天数
if ((year % 4 == 0 && year % 100 != 0) || year % 400 ==0){
febDay = 29;
}else{
febDay = 28;
}
switch (month){
case 12:
sumDay += 30;
case 11:
sumDay += 31;
case 10:
sumDay += 30;
case 9:
sumDay += 31;
case 8:
sumDay += 31;
case 7:
sumDay += 30;
case 6:
sumDay += 31;
case 5:
sumDay += 30;
case 4:
sumDay += 31;
case 3:
sumDay += febDay;
case 2:
sumDay += 31;
case 1:
sumDay += day;
System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDay + "天");
break;
default:
System.out.println("输入月份有误"); //当输入月份不是1-12时打印这句话
}
输出结果:输入月份有误时能够正确提示,输入2004.3.1打印2004年3月1日是当年的第61天,输入2021.3.1打印2021年3月1日是当年的第60天。
结论:在使用switch case时,break是可选项。