概述
20_分支结构
分支结构的概念
- 顺序结构,满足从上到下依次执行的------------图1
- 分支结构,进行条件判断,根据不同的判断结果选择不同的值,即当需要进行条件判断做出选择时,使用分支结构---------------图2
if分支结构---------最简单
-
if(条件表达式) { 语句块; }
-
相当于中文中的如果,如果条件表达式成立,就执行语句块中所有代码;如果条件表达式不成立,就应该跳过语句块不执行。如下图:
-
判断条件表达式是否成立
- => 若成立,则执行语句块;
- => 若不成立,则跳过语句块;
/* 编程使用if分支结构模拟网吧上网的过程 */ import java.util.Scanner; public class IfTest { public static void main(String[] args) { // 1、提示用户输入年龄信息并使用变量记录 System.out.println("请输入您的年龄:"); Scanner sc = new Scanner(System.in); int age = sc.nextInt(); // 2、使用if分支结构判断是否成年并给出对应的提示 if(age >= 18) { System.out.println("开心的浏览起了网页......"); } // 3、打印一句话 System.out.println("美好的时光总是短暂的!"); } }
案例:if分支结构查找最大值的
提示用户输入两个整数,使用if分支结构找到最大值并打印出来。
-
方式一:使用两个if分支结构可以找到最大值
/* 编程使用if分支结构查找两个整数中的最大值 */ import java.util.Scanner; public class IfMaxTest { public static void main(String[] args) { // 1、提示用户输入两个整数并使用变量记录 System.out.println("请输入两个整数:"); Scanner sc = new Scanner(System.in); int ia = sc.nextInt(); int ib = sc.nextInt(); // 2、使用if分支结构找到最大值并打印 // 方式一:使用两个if分支结构可以找到最大值 if(ia >= ib) { System.out.println("最大值是:" + ia); } if(ia < ib) { System.out.println("最大值是:" + ib); } } }
-
方式二:假设第一个数为最大值并记录 推荐方式 具有通用性
// 方式二:假设第一个数为最大值并记录 推荐方式 具有通用性 int max = ia; if(ib = max) { max = ib; } System.out.println("最大值是:" + max);
if else 分支结构
-
只会记录两种情况的时候使用 if else 分支结构,要么通过,要么不通过
-
if (条件表达式) { 语句块1; } else { 语句块2; }
-
判断条件表达式是否成立
- 若成立,则执行语句块1;
- 若不成立,则执行语句块2;
- 语句块1和语句块2并须有一个执行,而且有且只有一个执行。
/* 编程使用ifelse分支结构来模拟考试成绩查询的过程 */ import java.util.Scanner; public class IfElseTest { public static void main(String[] args) { // 1、提示用户输入考试成绩并使用变量记录 System.out.println("请输入您的考试成绩:"); Scanner sc = new Scanner(System.in); int score = sc.nextInt(); // 本质上就是在内存中申请了一块内存单元 // 2、使用if-else分支结构判断考试成绩是否及格并给出相应的提示 if(score >= 60) { System.out.println("恭喜您考试通过了!"); } else { System.out.println("下学期来补考把!"); } // 3、打印一句话 System.out.println("世界上最遥远的距离不是生与死而是你在if我在else,似乎一直相伴却又永远分离!"); } }
if 分支结构特点:满足就干,不满足就跳过
if - else 分支结构特点:满足就做这个,不满足就做那个
案例:if - else 分支结构判断负数和非负数
-
提示用户输入一个整数,使用 if - else 分支结构判断该整数是负数还是非负数并打印。
/* 编程使用if-else分支结构判断是否为负数和非负数 */ import java.util.Scanner; public class IfElseJudgeTest { public static void main(String[] args) { // 1、提示用户输入一个整数并使用变量记录 System.out.println("请输入一个整数:"); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); // 2、使用if-else分支结构判断负数和非负数并打印 if(num >= 0) { System.out.println(num + "是非负数"); } else { System.out.println(num + "是负数"); } } }
-
使用 if - else 分支结构判断该整数是正数、负数还是零。------------> if - else 分支结构的嵌套使用
System.out.println("-------------------------------"); // 2、使用if-else分支结构判断负数和正数、零并打印 if(num >= 0) { // 针对目前的非负数再次判断是正数还是零 if (num > 0) { System.out.println(num + "是正数"); } else { System.out.println(num + "是零"); } } else { System.out.println(num + "是负数"); }
if - else if - if 分支结构
-
有三种或者三种以上的选择,但是语句块也是有且只有一个执行
-
if(条件表达式1) { 语句块1; } else if(条件表达式2) { 语句块2; } else { 语句块n; }
-
执行流程:判断条件表达式1是否成立
- 若成立,则执行语句块1;
- 若不成立,则判断条件表达式2是否成立
- 若成立,则执行语句块2;
- 若不成立,则执行语句块n;
/* 编程使用 if-else if-else 分支结构来模拟购买火车票的过程 */ import java.util.Scanner; public class IfElseIfElseTest { public static void main(String[] args) { // 1、提示用户输入身份信息并使用变量记录 System.out.println("请输入您的身份信息:"); Scanner sc = new Scanner(System.in); String str = sc.next(); // 本质上就是在内存中申请了一块存储单元 // 2、使用if-else if-else分支结构判断身份信息并给出相应的提示 // 判断"军人"是否等于str,是否与str的数值相等 if("军人".equals(str)) { // 判断字符串数值是否相等使用.equals()方法 System.out.println("请免费乘车!"); } else if("学生".equals(str)) { System.out.println("请购买半价票!"); } else { System.out.println("请购买全价票!"); } // 3、打印一句话 System.out.println("坐上了火车去拉萨,去看那美丽的布达拉!"); } }
案例一:计算个人所得税
-
应纳税所得额:薪水 - 个税起征点
-
方式一:按照薪水所在范围,按照薪水所在范围进行梯度纳税和梯度计算,再将个人所得税计算出来,薪水越高,梯度越多,比较啰嗦
/* 编程使用if-else if-else分支结构计算个人所得税 */ import java.util.Scanner; public class IfSalaryTest { public static void main(String[] args) { // 1、提示用户输入个人的薪水并使用变量记录 System.out.println("请输入您的薪水:"); Scanner sc = new Scanner(System.in); // 局部变量:作用范围从声明开始一直到方法体结束 int salary = sc.nextInt(); // 2、使用if-else if-else分支结构判断薪水所在区间并计算对应的个人所得税 // 方式一:按照薪水所在范围,按照薪水所在范围进行梯度纳税和梯度计算,再将个人所得税计算出来,薪水越高,梯度越多 double salaryPrice = 0.0; // 个人所得税 if(salary <= 5000) { System.out.println("无需纳税!"); } else if(salary <= 8000) { // 块变量:作用范围从声明开始一直到当前语句块结束 // double salaryPrice = (salary - 5000) * 0.03; salaryPrice = (salary - 5000) * 0.03; } else if(salary <= 17000) { salaryPrice = (salary - 8000) * 0.1 + (8000 - 5000) * 0.03; } else if(salary <= 30000) { salaryPrice = (salary - 17000) * 0.2 + (17000 - 8000) * 0.1 + (8000 - 5000) * 0.03; } // ... 剩下的就不写了,依次内推 // 3、打印最终的计算结果 System.out.println("最终的个人所得税是:" + salaryPrice); } }
-
方式二:使用个人所得税公式:本月应纳税所得额 * 对应税率 - 速算扣除数
// 方式二:使用公式 // 个人所得税计算公式:本月应纳税所得额 * 对应税率 - 速算扣除数 if(salary <= 5000) { System.out.println("无需纳税!"); } else if(salary <= 8000) { // 块变量:作用范围从声明开始一直到当前语句块结束 // double salaryPrice = (salary - 5000) * 0.03; salaryPrice = (salary - 5000) * 0.03 - 0; } else if(salary <= 17000) { salaryPrice = (salary - 5000) * 0.1 -210; } else if(salary <= 30000) { salaryPrice = (salary - 5000) * 0.2 - 1410; } // ... 剩下的就不写了,依次内推
案例二:出驻车计费系统的实现
-
出租车计费方式:由里程钱数和等候时间钱数相加得出。
-
里程数前3公里13元,超过3公里到15公里部分每公里2元,15公里以上部分每公里3元。
-
等候时间没2分半1元,不足部分不要钱。
-
输入公里数和等候秒数,输出车费。
-
16公里,等候290秒,车费 = 13 + (15 - 3)*2 + (16 - 15) * 3 + 1 = 41
/* 编程使用 if-else if-else 分支结构实现出租车计费系统的实现 */ import java.util.Scanner; public class IfTaxiTest { public static void main(String[] args) { // 1、提示用户输入公里数和等候秒数并使用变量记录 System.out.println("请输入公里数和等候的秒数:"); Scanner sc = new Scanner(System.in); int km = sc.nextInt(); // 公里数 int sec = sc.nextInt(); // 秒数 // 2、根据公里数和计算对应的里程费并使用变量记录 int kmPrice = 0; // 里程费 if(km <= 3) { kmPrice = 13; } else if(km <= 15) { kmPrice = (km - 3) * 2 + 13; } else if(km > 15) { kmPrice = (km - 15) * 3 + (15 - 3) * 2 + 13; } // 3、根据等待的秒数来计算对应的等待费并使用变量记录 int secPrice = sec / 150; // 等待费 // 4、计算总费用并打印 int sumPrice = kmPrice + secPrice; // 总费用 System.out.println("本次出租车的总费用是:" + sumPrice); } }
案例三:if 分支结构实现等级判断
/*
编程使用 if-else if-else 分支结构判断考试成绩所在的等级
*/
import java.util.Scanner;
public class IfScoreTest {
public static void main(String[] args) {
// 1、提示用户输入考试成绩并使用变量记录
System.out.println("请输入考试成绩:");
Scanner sc = new Scanner(System.in);
int score = sc.nextInt(); // 考试的成绩
// 2、使用 if-else if-else 分支结构判断考试成绩所在的等级
if(score > 100) {
System.out.println("非法值");
} else if(score >= 90 && score <= 100) {
System.out.println("等级A");
} else if(score >= 80) {
System.out.println("等级B");
} else if(score >= 70) {
System.out.println("等级C");
} else if(score >= 60) {
System.out.println("等级D");
} else if(score >= 0) {
System.out.println("等级E");
} else {
System.out.println("非法值");
}
}
}
Switch case 分支结构
-
switch(变量/表达式) { case 字面值1:语句块1;break; case 字面值2:语句块2;break; ... default:语句块n; }
-
拿着变量或者表达式的结果来跟case后面的字面值进行匹配。在Java中直接写出来的整数数据可以叫:直接量、字面值、常量。字面值就是直接写出来的数据内容。break可以跳出switch-case分支结构外,如果所有字面值都没有匹配,就执行default(默认)。相当于if-else if-else多分支结构的变形。default后面可以有break也可以没有,因为break是用来跳出分支结构的,而default是最后的代码,执行完不管有无break都会跳出分支结构继续往下走。如果把default放在最上边就不可以省略了。
-
执行流程:计算变量/表达式的数值=>判断是否匹配字面值1
- =>若匹配,则执行语句块1=>执行break跳出当前结构
- =>若不匹配,则判断是否匹配字面值2
- =>若匹配,则执行语句块2=>执行break跳出当前结构
- =>若不匹配,则执行语句块n
-
switch()中支持的数据类型有:byte、short、char以及int类型,从jdk1.5开始支持枚举类型,从jdk1.7开始支持String类型。
-
不是必须有default,有些弱类型语言是不用写的,但是为了程序更完整、更安全,建议写上default
-
如果default语句在所有case最后,此时可以不加break 如果default语句之后还有case语句 如果不加break,则default语句执行过之后会继续下面的case语句,此时必须要在default之后加break语句,不过这种default用法是不推荐的
-
当所有分支都没有匹配成功,当有default的语句的话,就执行default分支中的代码块
-
case穿透就是:当在switch语句中,执行case分支语句,如果满足case1,但是在case1的语句块中,没有加break;,即使case1,满足条件,程序仍然会向下执行case2,即使case2不满足条件,除非case2语句块中有break;,程序会跳出switch选择结构,否则继续执行case3,一直这样执行下去,直到整个switch语句全部执行完毕或者遇到break,才能结束!
/* 编程使用 switch-case 分支结构实现考试成绩等级的判断 */ import java.util.Scanner; public class SwitchScoreTest { public static void main(String[] args) { // 1、提示用户输入考试成绩并使用变量记录 0 ~ 100 System.out.println("请输入考试成绩:"); Scanner sc = new Scanner(System.in); int score = sc.nextInt(); // 考试的成绩 // 2、使用 switch case 分支结构实现考试成绩的等级判断 switch(score / 10){ // 90 / 10 = 9 91 /10 =9 99 / 10 = 9 100/10 = 10 case 10: // System.out.println("等级A"); // break; 在switch 中匹配了这个case由于没有break,代码就会一行一行的往下执行,不管有没有匹配,语句块都会执行,直到遇到break才会跳出来。 case 9: System.out.println("等级A"); // case 穿透 break; case 8: System.out.println("等级B"); break; case 7: System.out.println("等级C"); break; case 6: System.out.println("等级D"); break; default: System.out.println("等级E"); } // 3、打印一句话 System.out.println("世界上最痴情的等待就是我当case你当switch,或许永远都不会选到自己!"); } }
案例:switch-case分支结构实现字符界面
-
/* 编程使用 switch-case 分支结构来模拟菜单效果 */ import java.util.Scanner; public class SwitchMenuTest { public static void main(String[] args) { // 1、绘制字符界面 System.out.println(" 欢迎来到系统界面"); System.out.println("-------------------------------------------------------"); System.out.print(" [1]学员系统 "); // println表示打印并换行,print表示打印不换行 System.out.println("[2]管理员系统"); System.out.println(" [0]退出系统"); System.out.println("-------------------------------------------------------"); System.out.println("请选择要进入的系统:"); Scanner sc = new Scanner(System.in); int choose = sc.nextInt(); // 2、使用switch-case 分支结构来模拟用户的选择并给出提示 switch(choose) { case 1: System.out.println("正在进入学员系统..."); break; case 2: System.out.println("正在进入管理员系统..."); break; case 0: System.out.println("谢谢使用,下次再见!"); break; default: System.out.println("输入错误,请重新选择!"); } } }
-
核心理念:以后只要遇到两种或者两种以上的选择时,我们有两种手法:1、if - else if -else 分支结构 2、switch-case 分支结构
最后
以上就是爱笑舞蹈为你收集整理的20_分支结构的概念的全部内容,希望文章能够帮你解决20_分支结构的概念所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复