iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
自我挑戰組

30天Java由淺入深系列 第 8

Day 8 : 條件式判斷

  • 分享至 

  • xImage
  •  

#介紹

今天要介紹的是「條件式判斷」。我們在前述章節有提前說到這個觀念,為了應付不同程式可能會面對到許多複雜的問題,條件判斷陳述句就顯得十分實用。簡單來說,當 if 條件內的陳述句成立時,就執行對應的程式碼,反之則跳出此判斷。在此章會大量使用到Day 7裡面的邏輯與比較運算子觀念,如果對此部分還不熟悉,可以回到上一節複習!!


#If…Else

If 條件判斷的種類有幾種,最簡單的我們可以用一個 If 概括程式需要被執行的條件。

/* if(condition){
			If the condition is True,executed the code.
}     */

int temperature = 29;
if(temperature < 30){
	System.out.println("The weather was cozy today.");    //If(true),so print it out.
}

如果要判斷不同的條件,也可以一次使用多個 If :

int grade = 88;
if(grade >= 90 && grade <= 100)
	System.out.println("You got A+.");
if(grade >= 85 && grade <= 89)
	System.out.println("You got A.");
if(grade >= 80 && grade <= 84)
	System.out.println("You got A-.");

Else敘述

我們可以觀察上面那段程式碼,雖然一樣能達成我們要的效果,但一旦當需要判斷的條件更多就會使程式可讀性(readability)變差。所以我們可以使用 Else敘述句(與 If 是一組的),當其條件判斷為False時,就會執行else裡面的程式碼。

/*多個if判斷改寫*/
int grade = 84;
if(grade < 90)        
{
	if(grade < 85)
		System.out.println("You got A-.");
	else
		System.out.println("You got A.");
}
else System.out.println("You got A+.");
  • 程式解析 : 第3行與第10行是一組if…else,若第3行條件成立,即進入其區塊程式碼,反之則執行else的敘述句。第5行與第7行是一組if…else,一樣當第5行成立則印出,反之則印出else敘述句。

巢狀結構

當判斷的條件都很相似時,可以用「巢狀結構」的模式縮減不必要的判斷。

int grade = 72;
if (grade > 90 && grade <= 100) 
  System.out.println("Excellent!");
		else if (grade > 80 && grade <= 90) 
		  System.out.println("Good!");
				else 
					System.out.println("Not bad.");
  • 程式解析 : 第2到7行就是一個巢狀結構。會循續的判斷下來,若一直到最後一個else就是上面的條件都不成立,印出其區塊程式碼。
    -> 附帶一提 : if…else都是一組放在一起,包含巢狀結構也是。’’’else if’’’寫法裡的else就是與上面一個if是一起的。可以自己寫看看更大的巢狀結構,會更了解這個概念。

三元運算子

以if…else來看,簡單來說就是短版的條件式判斷。主要是能取代一大段的程式碼,多用在替換簡單的if…else敘述。

/* variable = (condition) ? (ifexpressionTrue) : (ifexpressionFalse);*/
int grade = 100;
char GPA;
GPA = (grade >= 90) ? ('A') : ('B');
System.out.println(GPA);    /*Outputs : A*/
  • 程式解析 : 第4行短版的if…else,前面括號內的判斷我們可以看做成if( ),若成立則將問號後的第一個括號內容存給變數,反之則像是執行else,把第二個括號內容儲存。

#Switch

接著介紹另一種條件判斷- -Switch。與if…else最大的不同在於,涵蓋的case多,常見應用是透過我們自己輸入選擇想要執行的內容。
以下範例提供一個簡易歌單功能選擇列表,透過我們輸入選擇要用的功能。(功能撰寫部分此處尚未介紹,待後續更多內容)

char grade = 'B';
switch(grade) {
	case 'A' :
		System.out.println("Excellent!");
		break;
	case 'B' :
		System.out.println("Great!");
		break;
  case 'C' :
		System.out.println("Good!");
		break;
	case 'D' :
		System.out.println("Not bad.");
		break;
	case 'E' :
		System.out.println("Don't give up.");
		break;
	default : 
		System.out.println("Wrong data!!!");
		break;
}
  • 程式解析 : 首先我們看到第2行,switch( )內的括號內容即是編譯器要去尋找之case。接著進來switch內,可以看到有許多不同種的case,結尾時用:
  • break : 表示一個case的結束。若忘記加,編譯器會一直執行下去直到遇到break.
  • default : 以上的條件皆不符合時會執行的case.

簡易功能表 :

import java.util.Scanner;

public class web {
    public static void main(String[] args){
        
        Scanner input = new Scanner(System.in);
        System.out.println("請輸入功能編號: ");
        int function;
        function = input.nextInt();

        while(true){
	        switch(function)
            {
	            case 1 :
	                System.out.println("歌手查詢");
	                break;
	            case 2 :
	                System.out.println("歌名查詢");
	                break;
	            case 3 :
	                System.out.println("更改資訊");
	                break;
	            case 4 :
	                System.out.println("隨機撥放");
	                break;
	            default :
	                System.out.println("輸入錯誤");
	                break;
	        }
        }
    }
}

以上內容所有錯誤,煩請不吝嗇告知,謝謝您!!!/images/emoticon/emoticon12.gif


上一篇
Day 7 : 運算子與數學計算
下一篇
Day 9 : 迴圈
系列文
30天Java由淺入深30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言