日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

if-else和switch的練習及區別比較

作者:lemon_XD 更新時間: 2022-07-30 編程語言

嵌套分支,顧名思義,其實是在一個分支結構中又完整的嵌套了另一個完整的分支結構,里面的分支的結構稱為內層分支,外面的分支結構稱為外層分支。但是依據規范:分支層數最好不要超過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

欄目分類
最近更新