網站首頁 編程語言 正文
嵌套分支,顧名思義,其實是在一個分支結構中又完整的嵌套了另一個完整的分支結構,里面的分支的結構稱為內層分支,外面的分支結構稱為外層分支。但是依據規范:分支層數最好不要超過3層
下面來看一個公園票價的練習吧。
import java.util.Scanner;
public class nestedBranches{
public static void main(String args[]){
System.out.println("請輸入季節(1,代表旺季,2,代表淡季):");
Scanner scanner = new Scanner(System.in);
int season = scanner.nextInt();
//因為在下面的過程中,ticketprice需要打折(*0.3),所以直接將ticketprice定義為double類型,以防精度丟失。
double ticketprice1 = 30;
double ticketprice2 = 20;
if (season == 1){
System.out.println("請輸入年齡");
int age = scanner.nextInt();
if(age > 0 && age < 8){
System.out.println("您的票價免費!");
} else if(age > 8 && age <22){
System.out.println("您的票價是:"+(ticketprice1*0.5));
} else if(age > 22 && age < 60){
System.out.println("您的票價是:"+(ticketprice1));
} else if(age > 60){
System.out.println("你的票價是:"+(ticketprice1*0.3));
}
}else if(season == 2){
System.out.println("請輸入年齡:");
int age = scanner.nextInt();
if(age > 0 && age < 8){
System.out.println("您的票價免費!");
} else if(age > 8 && age <22){
System.out.println("您的票價是:"+(ticketprice2*0.5));
} else if(age > 22 && age < 60){
System.out.println("您的票價是:"+(ticketprice2));
} else if(age > 60){
System.out.println("你的票價是:"+(ticketprice2*0.3));
}
}
}
}
代碼經過測驗,不懂的小伙伴可以評論提問。
其實嵌套分支說白了就是if和else if之間的一個套用,邏輯理解起來比較簡單,但是在大部分的場景下我們不會去用if-else,首先來說它的效率不是那么的高,其次就是它看上去多少會有些亂,當然這個因人而異。那么除了if-else,其實我們還可以選擇去用switch。我們先來看一段switch的代碼,再來講解其中的原理。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
System.out.println("今天星期幾:");
Scanner scanner = new Scanner(System.in);
int week = scanner.nextInt();
switch (week){
case 1:
System.out.println("我和亦菲約會");
break;
case 2:
System.out.println("我和志玲約會");
break;
case 3:
System.out.println("我和詩詩約會");
break;
case 4:
System.out.println("我和井空約會");
break;
case 5:
System.out.println("我和熱巴約會");
break;
default:
System.out.println("參加各種party");
}
}
}
這段代碼是不是比if-else看著整潔的多。
switch和if-else相比,由于使用了Binary Tree算法,絕大部分情況下switch會快一點,除非是if-else的第一個條件就為true.
在比較的過程中,switch部分會被分配一個連續的查找表,switch case中不連續的部分也被添加上了相應的條目,switch表的大小不是根據case語句的多少,而是case的最大值的最小值之間的間距。在選擇相應 的分支時,會先有一個cmp子句,如果大于查找表的最大值,則跳轉到default子句。而其他所有的case語句的耗時都回事O(1).
相比于if-else結構,switch的效率絕對是要高很多的,但是switch使用查找表的方式決定了case的條件必須是一個連續的常量。而if-else則可以靈活的多。
其實,可以換一個簡單點的總結:
- 如果判斷的具體數值不多, 而且符合 byte、 short 、 int、 char, enum[枚舉], String 這 6 種類型。 雖然兩個語句都可以使用,但是建議使用 swtich 語句。
- 其他情況: 對區間判斷, 對結果為 boolean 類型的判斷, 使用 if, if 的使用范圍更廣 。
?
原文鏈接:https://blog.csdn.net/well_KD/article/details/126064522
相關推薦
- 2023-07-25 SpringBoot整合Quartz以及異步調用
- 2022-02-24 Oracle中decode函數用法_oracle
- 2021-12-06 C語言使用rand函數生成隨機數_C 語言
- 2022-12-09 C++?opencv學習之圖像像素的邏輯操作_C 語言
- 2022-07-18 python中數組array和列表list的基本用法及區別解析_python
- 2022-10-03 使用useImperativeHandle時父組件第一次沒拿到子組件的問題_React
- 2022-03-27 Python編程入門指南之函數_python
- 2023-02-09 Flask如何接收前端ajax傳來的表單(包含文件)_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支