20_分支结构的概念

20_分支结构

分支结构的概念

  • 顺序结构,满足从上到下依次执行的------------图1
  • 分支结构,进行条件判断,根据不同的判断结果选择不同的值,即当需要进行条件判断做出选择时,使用分支结构---------------图220_分支结构的概念_第1张图片

if分支结构---------最简单

  • if(条件表达式) {
    	语句块;
    }
    
  • 相当于中文中的如果,如果条件表达式成立,就执行语句块中所有代码;如果条件表达式不成立,就应该跳过语句块不执行。如下图:20_分支结构的概念_第2张图片

  • 判断条件表达式是否成立

    • => 若成立,则执行语句块;
    • => 若不成立,则跳过语句块;
    /*
    	编程使用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;
    }
    

    20_分支结构的概念_第3张图片

  • 判断条件表达式是否成立

    • 若成立,则执行语句块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;
    }
    

    20_分支结构的概念_第4张图片

  • 执行流程:判断条件表达式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("坐上了火车去拉萨,去看那美丽的布达拉!"); 
    	 }
     }
    

案例一:计算个人所得税

20_分支结构的概念_第5张图片

  • 应纳税所得额:薪水 - 个税起征点

  • 方式一:按照薪水所在范围,按照薪水所在范围进行梯度纳税和梯度计算,再将个人所得税计算出来,薪水越高,梯度越多,比较啰嗦

    /*
    	编程使用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 分支结构实现等级判断

20_分支结构的概念_第6张图片

/*
	编程使用 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跳出当前结构
      • =>若不匹配,则执行语句块n20_分支结构的概念_第7张图片
  • 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分支结构实现字符界面

20_分支结构的概念_第8张图片

  • /*
    	编程使用 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 分支结构

你可能感兴趣的:(笔记,JavaSE,java)