天天看點

java基礎筆記 -- 6.選擇結構-if語句-switch語句

一、流程控制

1.1 概述:

在一個程式執行的過程中,各條語句的執行順序對程式的結果是有直接影響的。也就是說,程式的流程對運作結果

有直接的影響。是以,我們必須清楚每條語句的執行流程。而且,很多時候我們要通過控制語句的執行順序來實作

我們要完成的功能。

1.2 順序結構

public static void main(String[] args){
    //順序執行,根據編寫的順序,從上到下運作
    System.out.println(1);
    System.out.println(2);
    System.out.println(3);
}
           

二、判斷語句

2.1 判斷語句 -- if

if (關系表達式) {

     語句體;

}

java基礎筆記 -- 6.選擇結構-if語句-switch語句

執行流程:

* 首先判斷關系表達式看其結果是true還是false.

* 如果是true就執行語句體

* 如果是false就不執行語句體

public static void main(String[] args) {
        System.out.println("開始");

        // 定義兩個變量
        int a = 10;
        int b = 20;
        // 變量使用if判斷
        if (a == b) {
            System.out.println("a等于b");
        }

        int c = 10;
        if (a == c) {
          System.out.println("a等于c");
        }
        System.out.println("結束");
    }
           

2.2 判斷語句 if...else

if(關系表達式) {

    語句體A;

}else {

    語句體B;

}

java基礎筆記 -- 6.選擇結構-if語句-switch語句

執行流程:

* 首先判斷關系表達式看其結果true還是false

* 如果是true就執行語句體A

* 如果是false就執行語句體B

public static void main(String[] args) {
        // 判斷給定的資料是奇數還是偶數
        // 定義變量 
        int a = 1;
        if (a % 2 == 0){
            System.out.println("a是偶數");
        } else {
            System.out.println("a是奇數");
        }
        System.out.println("結束");
    }
           

2.3 判斷語句 if...else if...else

if語句第三種格式: if...else if...else

if (判斷條件1) {

   執行語句1;  

} else if (判斷條件2) {

   執行語句2;  

}

...

}else if (判斷條件n) {

  執行語句n;   

} else {

   執行語句n+1; 

}

java基礎筆記 -- 6.選擇結構-if語句-switch語句

執行流程

* 首先判斷關系表達式1看其結果是true還是false

* 如果是true就執行語句體1

* 如果是false就繼續判斷關系表達式2看其結果是true還是false.

* 如果是true就執行語句體2

* 如果是false就繼續判斷關系表達式...看其結果是true還是false

* ...

* 如果沒有任何關系表達式為true,就執行語句體n+1

練習:

指定考試成績,判斷學生等級

90-100 優秀

80-89 好

70-79 良

60-69 及格

60 以下 不及格

public static void main(String[] args) {
		int score = 120;
		if (score >= 90 && score <= 100) {
			System.out.println("優秀");
		} else if (score >= 80 && score < 90) {
			System.out.println("好");
		} else if (score >= 70 && score < 80) {
			System.out.println("良");
		} else if (score >= 60 && score < 70) {
			System.out.println("及格");
		} else if (score >= 0 && score < 60) {
			System.out.println("不及格");
		} else { // 單獨處理邊界之外的不合理情況
			System.out.println("資料錯誤");
		}
	}
           

2.4 if語句和三元運算符的互換

在某些簡單的應用中,if語句是可以和三元運算符互換使用的。

public static void main(String[] args) {
    int a = 10;
    int b = 20;
    //定義變量,儲存a和b的較大值
    int c;
    if(a > b) {
       c = a;  
    } else {
       c = b;  
    }
    //可以上述功能改寫為三元運算符形式
    c = a > b ? a:b;
}
           

三、選擇語句

3.1 選擇語句--switch

* switch語句格式:

switch(表達式) {

  case 常量值:

     語句體1;

     break;

case 常量值:

     語句體2;

     break;

 ...

 default:

    語句體n+1;

     break;

}

執行流程:

* 首先計算出表達式的值

* 其次,和case依次比較,一旦有對應的值,就會執行相應的語句,在執行的過程中,遇到break就會結束。

* 最後,如果所有的case都和表達式的值不比對,就會執行default語句體部分,然後程式結束掉。

public static void main(String[] args) {
        // 定義變量,判斷是星期幾
        int weekday = 6;
        // switch語句實作選擇
        switch (weekday) {
            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;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期七");
                break;

                default:
                    System.out.println("你輸入的數字有誤");
                break;
        }
    }
           

switch 語句中,表達式的資料類型,可以是byte,short,int,char,enum(枚舉),JDK7後可以接收字元串。

3.2 case的穿透性

在switch語句中,如果case的後面不寫break,将出現空透現象,也就是不會在判斷下一個case的值,直接向後運作,直到遇到break,或者整體switch結束。

public static void main(String[] args) {
  int i = 5;
  switch (i){
    case 0:
      System.out.println("執行case0");
      break;
    case 5:
      System.out.println("執行case5");
    case 10:
      System.out.println("執行case10");
    default:
      System.out.println("執行default");
  }
           

上述程式中,執行case5後,由于沒有break語句,程式會一直向後走,不會在判斷case,也不會理會break,直接

運作完整體switch。

由于case存在穿透性,是以初學者在編寫switch語句時,必須要寫上break。