1. 程式人生 > >選擇分支和迴圈

選擇分支和迴圈

上節課講了運算子和型別轉換,這節課主要來學學分支結構和迴圈

一個程式之所以有各種各樣的功能,除了因為它可以做運算(包括算數運算和邏輯運算)以外,還在於它可以根據不同的條件進行判斷來選擇執行不同的程式碼,而要實現這樣的功能,就必須用到分支結構和迴圈。

首先來說說程式流程控制結構:

  • 順序結構

  • 程式從上到下逐行地執行,中間沒有任何判斷和跳轉。

  • 分支結構

  • 根據條件,選擇性地執行某段程式碼。

  • 有if…else和switch兩種分支語句。

  • 迴圈結構

  • 根據迴圈條件,重複性的執行某段程式碼。

  • 有while、do…while、for三種迴圈語句。

  • 注:JDK1.5提供了foreach迴圈,方便的遍歷集合、陣列元素。

順序結構

Java中定義變數時採用合法的前向引用。如:

    int num1 = 12;

    int num2 = num1 + 2;

錯誤形式:

    int num2 = num1 + 2;

int num1 = 12;

結論: java裡的所有量(變數、常量)必須先聲明後使用

分支語句1: if-else語句

if語句三種格式:

  1. if(true)

{

              //程式碼塊;

}

解釋:因為條件已經是true,所以會直接執行程式碼塊

  1. if(條件表示式)

{

              //程式碼塊1;

    }

else

{

              //程式碼塊2;

}

解釋: 如果條件表示式的值為true,則執行程式碼塊1,否則執行程式碼塊2

  1. if(條件表示式1)

{

              //程式碼塊1;

    }

else if (條件表示式2)

{

              //程式碼塊21;

    }

       ……

else

{

              //執行程式碼塊2;

}

解釋: 如果條件表示式1的值為true,則執行程式碼塊1,否則如果條件表示式2的值

              true,則執行程式碼塊21,否則執行程式碼塊2

    注意:如果程式碼塊內只有一條語句,則大括號可以省略,

所以格式3其實是格式2的變種

分支結構2:switch語句

switch(表示式)

{

       case 常量1:

              語句集1;

              break;

       case 常量2:

              語句集2;

              break;

       … …

       case 常量N:

              語句集N;

              break;

       default:

              語句集;

              break;

}

表示式與哪個case後的值相等就執行哪個case後的語句集,break語句表示跳出switch結構,如果都不匹配則執行default後的語句集

注意:

  1. switch(表示式)中表達式的返回值必須是下述幾種型別之一:byte,short,char,int,列舉,String;(列舉和String以後講)

  2. case子句中的值必須是常量,且所有case子句中的值應是不同的;

  3. default不是必須的

提示: 大家可以自己去試試如果不加break會是什麼後果

demo:

給三個數排序

public static void main(String[] args) {     int a = 3, b = 2, c = 1;     int d = 0;     if (a>b)     {         d = a;         a = b;         b = d;     }     if (a > c)     {         d = a;         a = c;         c = d;     }     if (b > c)     {         d = b;         b = c;         c = d;     }     System.out.println(a);     System.out.println(b);     System.out.println(c); }

執行結果:

1

2

3

迴圈:

迴圈有三種: while,for,do-while

while 迴圈

while( 條件表示式)

{

       迴圈體;

}

其中條件表示式的值必須是boolean型別

如果條件表示式的值為true,則迴圈執行迴圈體,直到條件不滿足

如果迴圈體裡只有一條語句,大括號可以省略

demo

計算 1+2+3+…+99+100

public static void main(String[] args) {     int i = 1;     int sum = 0;     while(i <= 100)         sum += i++;     System.out.println(sum); }

執行結果:

5050

for迴圈

for(初始化語句;條件表示式;變更語句)

{

       迴圈體

}

for迴圈最開始會執行初始化語句,然後根據條件表示式來判斷是否執行迴圈體

每次執行完迴圈體後會去執行一次變更語句,然後再去根據條件表示式判斷是否繼續迴圈

demo

計算 1+2+3+…+99+100

public static void main(String[] args) {     int sum = 0;     for(int i =0; i <= 100; i++)         sum += i;     System.out.println(sum); }

執行結果

5050

do-while迴圈

do{

       迴圈體

}while(條件表示式);

和while類似,只不過會先執行一次迴圈體之後再去做判斷是否繼續執行

注意do-while語句結尾是有分號的

demo

計算 1+2+3+…+99+100

public static void main(String[] args) {     int i = 1;     int sum = 0;

do{

    sum += i++;

}while(i <= 100);             System.out.println(sum); }

continue語句:

       只能存在於迴圈體中,作用: 提前結束(或者說跳過)本次迴圈

break 語句

       可存在於迴圈體中, 作用: 跳出迴圈

最後,if-else 和三種迴圈是可以互相任意巢狀的

demo:

while和if巢狀版 1+2+3+…+99+100

public static void main(String[] args) {     int i = 1;     int sum = 0;     while(true)     {         sum += i++;         if (i > 100)             break;     }     System.out.println(sum); }

執行結果

5050