一,if分支
- 根据判断的结果(真或假)决定执行某个分支的代码
1.分支的作用
例1:比如你去医院检查,医生给你测心跳,这个心跳数据呢,会录入到医院的系统里,然后判断你的心跳有没有超过正常指标,如果超过,就视为不正常;没超过或者刚刚好,就是正常的。
例2:比如发微信红包给别人的时候,微信会判断你的钱包额度够不够发这个额度的红包,如果够,就可以发出;如果不够,就不能发。
2.if分支的三种格式:
if:如果的意思
格式1:
if (条件表达式){
语句体;
}
格式2:
if (条件表达式) {
语句体1;
}else {
语句体2;
}
格式3:
if (条件表达式1) {
语句体1;
}else if (条件表达式2) {
语句体2;
}else if (条件表达式3) {
语句体3;
}
......
else {
语句体n+1;
}
格式1例子:
String patientName = "刘备"; // 病人
// 异常心跳
int heartRate = 30; // 用于测试 if分支结构
// 正常心跳
int heartRate2 = 80; // 用于测试 if分支结构
System.out.println("测试病人心跳数据异常时:");
System.out.println("开始检查...");
//2.使用if分支结构的 格式1 来判断心跳数据是否小于60,或者大于100,如果是true,就为异常
if (heartRate < 60 || heartRate > 100) { // if判断心跳数据是否小于60,或者大于100
// 判断结果为true,发现病人的心跳数据异常,需进一步检查
System.out.println(patientName + "先生,您的心跳数据是:" + heartRate + ",还需进一步检查!");
}
// 检查结束!
System.out.println("检查结束!");
System.out.println("\n测试病人心跳数据正常时:");
System.out.println("开始检查...");
// if判断心跳数据是否小于60,或者大于100,如果是true,就为异常
if (heartRate2 < 60 || heartRate2 > 100) {
// 判断结果为false,发现病人的心跳数据正常,不符合判断条件,所以不执行if里的代码语句
System.out.println(patientName + "先生,您的心跳数据是:" + heartRate2 + ",还需进一步检查!");
}
// 检查结束!
System.out.println("检查结束!");
格式2例子:
// 需求:给女朋友发一个1314的红包,钱包余额:1550.89
/*
分析需求:
1.定义一个男方名字、钱包:余额为1550.89
2.使用if分支结构的 格式2 来判断男方微信钱包余额是否大于等于1314;
如果大于等于1314,则返回:“红包已发送!”
如果小于1314,则返回:“钱包余额不足,红包未发送!”
3. 格式2:if (条件表达式) {代码块1...} else {代码块2...}
*/
// 1.定义一个男方名字、钱包:余额为1550.89
String manName = "赵云";
double money = 1550.89; // 模拟钱包余额充足
double money2 = 2.5; // 模拟钱包余额不足
System.out.println("测试钱包余额充足时:");
// 2.使用if分支结构的格式2来判断男方微信钱包余额是否大于等于1314
if (money >= 1314) {
// 判断结果为true,发现用户的余额大于等于1314,则返回:“红包已发送!”,将不执行代码块2
System.out.println(manName + "先生,您的红包已发送成功!");
}else {
// 判断结果为false,发现用户的余额小于1314,则返回:“钱包余额不足,红包未发送!”,将不执行代码块1
System.out.println(manName + "先生,您的钱包余额已不足,红包未发送成功!");
}
System.out.println("\n测试钱包余额不足时:");
// 2.使用if分支结构的格式2来判断男方微信钱包余额是否大于等于1314
if (money2 >= 1314) {
// 判断结果为true,发现用户的余额大于等于1314,则返回:“红包已发送!”,将不执行代码块2
System.out.println(manName + "先生,您的红包已发送成功!");
}else {
// 判断结果为false,发现用户的余额小于1314,则返回:“钱包余额不足,红包未发送!”,将不执行代码块1
System.out.println(manName + "先生,您的钱包余额已不足,红包未发送成功!");
}
格式3例子:
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的分数");
int i = sc.nextInt();
if (i>=0&&i<60){
System.out.println("c级员工能不能滚阿");
}else if (i>=60 &&i<80){
System.out.println("b级员工还有点用");
}else if (i>=80&&i<90){
System.out.println("a级员工中流砥柱");
}else if (i>=90&&i<=100){
System.out.println("a+员工下个月就提拔你");
}else {
System.out.println("输入分数都输不懂赶紧种田");
}
特点
第一种格式:适合一个判断条件使用:条件表达式判断为true时,则执行语句体
第二种格式:适合一个判断条件,如果…否则使用:条件表达式判断为true时,则执行里面的语句体1;否则为false,执行语句体2;
第三种格式:适合多个判断条件使用:条件表达式1判断为true时,则执行语句体1;条件表达式1判断为false,则进行条件表达式2的判断,为true,则执行语句体2;… 如果条件表达式1和2和 … 的判断都为true,则执行最后一个 else 里的语句体
二:switch分支
匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好。
switch(表达式) {
case 值1:
执行代码...;
break; // 跳出switch分支
case 值2:
执行代码...;
break;
...
case 值n-1:
执行代码n-1...;
break;
default:
执行代码n;
}
执行流程:
1.先执行表达式的值,拿着这个值与case后的值进行匹配。
2.匹配哪个case的值为true,就执行哪个,遇到break就跳出switch分支。
3.如果case后的值都不匹配则执行default。
switch例子:
// 一、需求:备忘录(一周的行程)
// 二、分析需求
// 1.定义变量,分别存放周一、周二、周三、周四、周五、周六、周日
// 2.使用switch分支结构,设置case值,用变量值 与 case值 进行匹配,提示当天该干什么
Scanner sc = new Scanner(System.in); //键盘输入
System.out.println("需要观察周几的日程"); //贴心的给出提示
String weekday = sc.next();
switch (weekday){ //用变量值与case值进行匹配,输出当天该干什么
case "周一":
System.out.println("巡视工作,观察环境");
break;
case "周二":
System.out.println("请求大牛程序员帮忙解决bug");
break;
case "周三":
System.out.println("主动帮助新来的女程序员解决bug");
break;
case "周四":
System.out.println("今夜吃麻辣香锅");
break;
case "周五":
System.out.println("洗漱干净等待周末");
break;
case "周六":
System.out.println("与王婆介绍的小芳相亲");
break;
case "周日":
System.out.println("郁郁寡欢,准备上班");
break;
default: // 当switch(表达式)——>表达式的值匹配不上所有case后的值时,执行以下代码
System.out.println("数据输入错误");
}
三:switch穿透性
如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才跳出switch分支,这就是switch的穿透性
switch穿透性案例(月份天数查看器)
-
需求:用户输入月份可以展示该月份的天数
- 1、3、5、7、8、10、12月份都是31天
- 2月份是闰年为29天、非闰年为28天
- 4、6、9、11月是30天
// 目标:通过案例学会使用switch的穿透性,并理解其流程
/*
需求:用户输入月份可以展示该月份的天数
(1) 1、3、5、7、8、10、12月份都是31天
(2) 2月份是闰年为29天、非闰年为28天
(3) 4、6、9、11月是30天
分析需求 :
1.导入Scanner包
2.创建Scanner扫描器对象
3.定义变量,用于接收用户输入的月份
4.使用switch分支将 用户输入的月份 与 case值 进行匹配
5.利用switch的穿透性设置case值为1、3、5、7、8、10都不设置break跳出,直到12才设置break跳出分支,执行输出:用户输入的月份 + ”月是31天“
6.case值为2时,设置break跳出分支,执行输出:用户输入的月份 + ”月是闰年为29天、非闰年为28天“
7.case值为4、6、9都不设置break跳出,直到11才设置break跳出分支,执行输出:用户输入的月份 + ”月是30天“
*/
// 2.创建Scanner扫描器对象
Scanner sc = new Scanner(System.in);
System.out.println("请您输入月份(1~12):");
// 3.定义变量,用于接收用户输入的月份
int month = sc.nextInt();
// 4.使用switch分支将 用户输入的月份 与 case值 进行匹配
switch (month) {
// 5
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month + "月是31天");
break;
// 6
case 2:
System.out.println(month + "月是闰年为29天、非闰年为28天");
break;
// 7
case 4:
case 6:
case 9:
case 11:
System.out.println(month + "月是30天");
break;
default:
System.out.println("数据错误!");
}
- 存在多个case分支的功能代码是一样时,可以利用穿透性把流程集中到同一处地方处理,这样可以简化代码