1. 程式人生 > >Java 筆記 之 流程控制語句( if & switch & for & while)

Java 筆記 之 流程控制語句( if & switch & for & while)

概述

在一個程式執行的過程中,各條語句的執行順序對程式的結果是有直接影響的。也就是說程式的流程對執行結果有直接的影響。所以,我們必須清楚每條語句的執行流程。而且,很多時候我們要通過控制語句的執行順序來實現我們要完成的功能。

分類

   順序結構
   選擇結構
   迴圈結構

下面分別說一下每個結構

順序結構

  • 概述
    是程式中最簡單最基本的流程控制,沒有特定的語法結構,按照程式碼的先後順序,依次執行,程式中大多數的程式碼都是這樣執行的。
  • 總的來說:寫在前面的先執行,寫在後面的後執行
  • 順序結構圖
    順序結構圖
public class Demo01 {
    public
static void main(String[] args) { System.out.println("開始"); System.out.println("語句A"); System.out.println("語句B"); System.out.println("語句C"); System.out.println("結束"); } }

選擇結構

  • 概述
     選擇結構也被稱為分支結構。
     選擇結構有特定的語法規則,程式碼要執行具體的邏輯運算進行判斷,邏輯運算的結果有兩個,所以產生選擇,按照不同的選擇執行不同的程式碼

  • Java語言提供了兩種選擇結構語句
     if語句
     switch語句

選擇結構if

  • if語句有三種格式

    • if語句第一種格式:
      if(關係表示式) {
      語句體
      }

      執行流程
       首先判斷關係表示式看其結果是true還是false
       如果是true就執行語句體
       如果是false就不執行語句體

      流程圖
      if(1)

      ```
      public class Demo01If {
          public static void main(String[] args) {
              System.out.println("開始");
              // 定義兩個變數
              int a = 10;
              int b = 20;
      
              if (a == b) {
                  System.out.println("a等於b");
              }
      
              int c = 10;
              if (a == c) {
                  System.out.println("a等於c");
              }
      
              System.out.println("結束");
          }
      }
      
      ```
      
    • if語句第二種格式:
      if(關係表示式) {
      語句體1;
      }else {
      語句體2;
      }

      執行流程
       首先判斷關係表示式看其結果是true還是false
       如果是true就執行語句體1
       如果是false就執行語句體2
      流程圖
      if(2)

      public class Demo02If {
          public static void main(String[] args) {
              System.out.println("開始");
              // 判斷給定的資料是奇數還是偶數
              // 定義變數
              int a = 100;
              // 給a重新賦值
              a = 99;
      
              if (a % 2 == 0) {
                  System.out.println("a是偶數");
              } else {
                  System.out.println("a是奇數");
              }
      
              System.out.println("結束");
          }
      }
      
    • if語句第三種格式:
      if (判斷條件1) {
      執行語句1
      } else if (判斷條件2) {
      執行語句2
      }

      else if (判斷條件n) {
      執行語句n
      } else {
      執行語句n+1
      }

      執行流程
       首先判斷關係表示式1看其結果是true還是false
       如果是true就執行語句體1
       如果是false就繼續判斷關係表示式2看其結果是true還是false
       如果是true就執行語句體2
       如果是false就繼續判斷關係表示式…看其結果是true還是false
       …
       如果沒有任何關係表示式為true,就執行語句體n+1。

      流程圖
      if(3)

      例:
      x和y的關係滿足如下:
      x>=3 y = 2x + 1;
      -1<=x<3 y = 2x;
      x<-1 y = 2x – 1;
      根據給定的x的值,計算出y的值並輸出。

      public class Demo03If {
          public static void main(String[] args) {
              // x和y的關係滿足如下:
              // x>=3 y = 2x + 1;
              // -1<=x<3 y = 2x;
              // x<=-1 y = 2x – 1;
              // 根據給定的x的值,計算出y的值並輸出。
      
              // 定義變數
              int x = 5;
      
              /*
              int y;
              if (x >= 3) {
                  y = 2 * x + 1;
              } else if (x >= -1 && x < 3) {
                  y = 2 * x;
              } else if (x < -1) {
                  y = 2 * x - 1;
              }else {
                  y = 0;
              }
              */
      
              /*int y = 0;
              if (x >= 3) {
                  y = 2 * x + 1;
              } else if (x >= -1 && x < 3) {
                  y = 2 * x;
              } else if (x < -1) {
                  y = 2 * x - 1;
              }*/
      
              int y;
              if (x >= 3) {
                  y = 2 * x + 1;
              } else if (x >= -1 && x < 3) {
                  y = 2 * x;
              } else  {
                  y = 2 * x - 1;
              }
              System.out.println("y的值是:"+y);
          }
      }
    • 總結
       第一種格式適合做一種情況的判斷
       第二種格式適合做二種情況的判斷
       第三種格式適合做多種情況的判斷

  • 選擇結構switch
    格式
    switch(表示式) {
    case 目標值1:
    語句體1;
    break;
    case 目標值2:
    語句體2;
    break;

    default:
    語句體n+1;
    break;
    }

    格式解釋
     switch表示這是switch語句
     表示式的取值:byte,short,int,char
     JDK5以後可以是列舉(今後會講)
     JDK7以後可以是String(面向物件講解)
     case後面跟的是要和表示式進行比較的值
     語句體部分可以是一條或多條語句
     break表示中斷,結束的意思,可以結束switch語句
     default語句表示所有情況都不匹配的時候,就執行該處的內容,和if語句的else相似。

    執行流程
     首先計算出表示式的值
     其次,和case依次比較,一旦有對應的值,就會執行相應的語句,在執行的過程中,遇到break就會結束。
     最後,如果所有的case都和表示式的值不匹配,就會執行default語句體部分,然後程式結束掉。

    流程圖
    switch

  • 迴圈結構
    概述
    迴圈有一個開始條件
    迴圈語句可以在滿足迴圈條件的情況下,反覆執行某一段程式碼,這段被重複執行的程式碼被稱為迴圈體語句,當反覆執行這個迴圈體時,需要在合適的時候把迴圈判斷條件修改為false,從而結束迴圈,否則迴圈將一直執行下去,形成死迴圈。

    迴圈語句的組成
     迴圈變數初始化 (初始化表示式):一條或者多條語句,這些語句完成一些初始化操作。
     迴圈出口(布林表示式):這是一個boolean 表示式,這個表示式能決定是否執行迴圈體。
     迴圈邏輯內容(迴圈體):這個部分是迴圈體語句,也就是我們要多次做的事情。
     迴圈增量(步進表示式):這個部分在一次迴圈體結束後,下一次迴圈判斷條件執行前執行。通過用於控制迴圈條件中的變數,使得迴圈在合適的時候結束。

    • 迴圈結構for
      格式
      for(初始化表示式①;布林表示式②;步進表示式④){
      迴圈體③
      }

      執行流程
      執行順序: ①②③④>②③④>②③④… ②不滿足為止。
      ①負責完成迴圈變數初始化
      ②負責判斷是否滿足迴圈條件,不滿足則跳出迴圈
      ③具體執行的語句
      ④迴圈後,迴圈條件所涉及變數的變化情況

      流程圖
      for迴圈

    • 迴圈結構while
      格式

      • 基本格式
        while(布林表示式) {
        迴圈體語句;
        }

      • 擴充套件格式
        初始化表示式①
        while(布林表示式②){
        迴圈體③
        步進表示式④
        }

      執行流程
      執行順序: ①②③④>②③④>②③④… ②不滿足為止。
      ①負責完成迴圈變數初始化。
      ②負責判斷是否滿足迴圈條件,不滿足則跳出迴圈。
      ③具體執行的語句。
      ④迴圈後,迴圈變數的變化情況。

      流程圖
      while

    • 迴圈結構dowhile
      格式

      • 基本格式
        do {
        迴圈體語句;
        }while(布林表示式);

      • 擴充套件格式
        初始化表示式①
        do{
        迴圈體③
        步進表示式④
        }while(布林表示式②);

      執行流程
      執行順序: ①③④>②③④>②③④… ②不滿足為止。
      ①負責完成迴圈變數初始化。
      ②負責判斷是否滿足迴圈條件,不滿足則跳出迴圈。
      ③具體執行的語句
      ④迴圈後,迴圈變數的變化情況

      流程圖
      dowhile

跳轉控制語句

概述
想讓迴圈在某一步的時候結束或者跳過某些資料不要這些資料,現在就做不了這件事情。為了彌補這個缺陷,Java就提供了break,continue來實現控制語句的中斷和跳轉。

 break 中斷
 continue 繼續

  • Break

    • break的使用場景:
      在選擇結構switch語句中
      在迴圈語句中
      離開使用場景的存在是沒有意義的
    • break的作用:
      跳出單層迴圈
            public class Demo01Break {
                        public static void main(String[] args) {
                            //離開使用場景沒有意義
                            //break;//break cannot be used outside of a loop or a switch
    
                            for (int i = 1; i <=10; i++) {
                                //需求:列印完兩次HelloWorld之後結束迴圈
                                if(i == 3){
                                    break;
                                }
                                System.out.println("HelloWorld"+i);
                            }
                        }
                    }
  • Continue

    • continue的使用場景:
      • 在迴圈語句中
      • 離開使用場景的存在是沒有意義的
    • continue的作用:
      單層迴圈對比break,然後總結兩個的區別
      break 結束當前迴圈
      continue 結束本次迴圈,繼續下一次迴圈
        public class Demo02Continue {
                public static void main(String[] args) {
                    //離開使用場景沒有意義
                    //continue;//離開使用場景沒有意義
    
                    for (int i = 1; i <=10; i++) {
                        //需求:不列印第三次HelloWorld
                        if(i == 3){
                            continue;
                        }
                        System.out.println("HelloWorld"+i);
                    }
                }
        }