if - else 條件流程控制

人類在處理事情的時候常常會根據不同的狀況而採用不同的策略,這是一種智慧的表現。程式設計的誕生就是為了建立輔助人類的判斷。條件流程控制的判斷依據只有兩種,分別表示邏輯的「true」與「false」。條件流程控制的判斷依據 if - else 運算式是否成立而執行。運算符號請參考運算式與運算子中的關係運算子章節.. 請嘗試下列程式碼是否與預期的結果一致 :


public class CH0601 {
  
  public static void main(String[] args) {

    int a = 1, b = 2, c = 3;

    String StringA="hello", StringB="world";

    System.out.println(a==b);                     //數值相等

    System.out.println(a!=b);                     //數值不相等

    System.out.println(StringA.equals(StringB));   //字串相等

    System.out.println(!StringA.equals(StringB));  //字串不相等

    System.out.println(a==b && a==c);              //左右2邊的敘述均成立

    System.out.println(a==b || a==c);              //左右2邊的敘述任何1邊成立

    System.out.println(a>b);                    //左側值大於右邊

    System.out.println(a<b);                    //右側值大於左邊

    }

}

只要是物件都有.equals(obj)方法,用於比較括號內的物件內容。
比較物件「相等」時至少2個運算子「==」「!=」,單個運算子「=」是賦值的意思。


if 單向流程控制

以單項條件判斷,當結果為「true」時所要進行的動作。這裡假設一個自動控制空調的程式裡有一個 temp 變數,其中存放的是現在的氣溫,當氣溫高過28度時運轉壓縮機, 當氣溫低於 26 度時自動關閉壓縮機。
public class CH0602 {
  
  public static void main(String[] args) {

    int temp = 29; //假設感測器提供的溫度為29度

    if(temp > 28){

      System.out.println("開放空調系統");

    }

    if(c < a)

    System.out.println("關閉空調系統");


  }

}


當if( )的比較運算結果為「true」時
程式執行if( ){ }後方大括號區塊的敘述。
若後後方沒有大括號,則執行第1個分號敘述。
建議在此階段儘量採用大括號區塊,以清楚分隔程式流程。


if 雙向流程控制

以單項條件判斷,當結果為「true」時所要進行的動作,以及結果為「false」時所要進行的動作。假設一個自動控制空調的程式裡有一個 hour 變數, 其中存放的是現在的時間,當時間超過早上8點時自動開放空調系統電源, 當超過下午4點自動關閉空調系統電源。
public class CH0603 {
  
  public static void main(String[] args) {

    int hour = 22; //假設計時器傳回時間為晚上10點

    if(hour > 8 && hour < 16){

      System.out.println("電源開啟");

    }else{

      System.out.println("電源關閉");

    }

  }

}


注意與CH010不同之處在於 else 的用法。
else{ }區塊表示當判斷式為「false」時,程式要執行的範圍。


鏈狀 if

當要檢查與問題相關的多於1個條件時,使用以多項條件判斷的鏈狀 if。當其中任一項判斷結果為「true」時,執行該區塊所要進行的動作。 這裡假設一個自動變頻空調的程式裡有一個 temp 變數,其中存放的是現在的氣溫,當氣溫高過30度時以全速運轉壓縮機, 當氣溫高於 28 度時以半速運轉壓縮機,而氣溫高於26度時以低速運轉,其他情況則停止壓縮機採用送風的方式運轉。
public class CH0604 {

 public static void main(String[] args) {
  
  int temp = 29; //假設感測器提供的溫度為29度
  
  if (temp >= 30){ 

   System.out.println("全速運轉");

  }else if (temp < 30 && temp >= 28){ 

   System.out.println("半速運轉");

  }else if (temp < 28 && temp >= 26){ 

   System.out.println("低速運轉");

  }else{ 

   System.out.println("送風運轉");

  }

 }

}

巢狀if

以多項條件判斷,視判斷結果執行不同區塊。這裡假設一個自動變頻空調的程式裡有一個 hour 變數和temp ,其中存放的是現在的時間和氣溫,當氣溫高過30度時以全速運轉壓縮機, 當氣溫高於 28 度時以半速運轉壓縮機,而氣溫高於26度時以低速運轉,當氣溫低於26度以送風運轉。另外,若時間為上午11點到下午1點之間除非氣溫超過38度以低速運轉,否則只以送風運轉。
public class CH0605 {

 public static void main(String[] args) {

  int temp = 34; // 假設感測器提供的溫度為34度
  int hour = 12; // 中午12點

  if (hour >= 11 && hour <= 13) {

   if (temp >= 30) {

    System.out.println("低速運轉");

   } else {

    System.out.println("送風運轉");

   }

  } else {

   if (temp >= 30) {

    System.out.println("全速運轉");

   } else if (temp < 30 && temp >= 28) {

    System.out.println("半速運轉");

   } else if (temp < 28 && temp >= 26) {

    System.out.println("低速運轉");

   } else {

    System.out.println("送風運轉");

   }

  }

 }

}
請人性化改變 CH0605 程式中對午休時間的條件流程控制。
下一步 switch 流程控制

沒有留言:

張貼留言