1. 程式人生 > 實用技巧 >Java控制流程02: 三大結構(順序、選擇、迴圈)

Java控制流程02: 三大結構(順序、選擇、迴圈)

順序結構

Java的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行

順序結構是最簡單的演算法結構

語句和語句之間,框與框之間是按從上到下的順序執行的,它是由若干個依次執行的處理步驟組成的,它是任何一個演算法都離不開的一種基本演算法結構

選擇結構

if單選擇結構

  我們很多時候需要判斷一個東西是否可行,然後我們才去執行,這樣一個過程在程式中用if語句來表示

語法

if(布林表示式){
//如果布林表示式為true將執行的語句
}

if雙選擇結構

現在有一個需求,公司要收購一個軟體,成功了,給人支付100萬元,失敗了,自己找人開發,這樣的需求,用一個if就搞不定了,我們需要兩個判斷,需要一個雙選擇結構,所以就有了if-else結構。

語法

if(布林表示式){
//如果布林表示式的值為true      
}
else{
//如果布林表示式的值為false
}

if多選擇結構

我們發現剛才的結構不符合實際情況,真實的情況還可能存在ABCD,存在區間多級判斷,比如90~100就是A,80~90就是B等等,在生活中我們很多時候的選擇不僅僅只有兩個。所以我們需要一個多選擇結構來處理這類問題。

語法

if(布林表示式1){
//如果布林表示式1的值為true執行程式碼
}
else if(布林表示式2){
//如果布林表示式2的值為true執行程式碼
}
else if(布林表示式3){
//如果布林表示式3的值為true執行程式碼
}
else
{ //如果以上布林表示式都不為true執行程式碼 }

巢狀的if結構

使用巢狀的if...else語句是合法的,也就是說你可以在另一個 if 或者else if 語句中使用if或者else if 語句。你也可以像if語句一樣巢狀else if ... else

語法

if(布林表示式1){
//如果布林表示式1的值為true執行程式碼
    if(布林表示式2){
//如果布林表示式2的值為true執行程式碼
    }
}

switch多選擇結構

多選擇結構還有一個實現方式就是switch case語句

switch case 語句判斷一個變數與一系列值中某個值是否相等,每個值稱為一個分支

switch語句中的變數型別可以是

  • byte、short、int或者是char
  • 從JavaSE7開始,switch支援字串String型別了
  • case標籤必須是字串或者常量
 switch (expression) {
            case value1:
          //語句
                break;
            case value2:
               //語句
                break;
//可以有任意數量的case語句
            default:
       //語句
}

迴圈結構

while迴圈

while是最基本的迴圈,它的結構為

while(布林表示式){
//迴圈內容
}
  • 只要布林表示式為true,迴圈就會一直執行下去
  • 我們大多數情況是會讓迴圈停止下來的,我們需要讓一個表示式失效的方式來結束迴圈
  • 少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等
  • 迴圈條件一直為true就會造成無限迴圈(死迴圈),我們正常的業務程式設計中應該儘量避免死迴圈,會影響程式效能或者造成程式卡死崩潰

案例:計算1+2+3+...+100

程式碼

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

do...while迴圈

對於while而言,如果不滿足條件,則不能進入迴圈,但有時候我們需要即使不滿足條件,也至少執行一次

do...while迴圈和while迴圈相似,不同的是,do...while迴圈至少會執行一次

do{
//程式碼語句
}
while(布林表示式);

while和do...while的區別

  • while先判斷後執行,do...while先執行後判斷
  • do...while總是保證迴圈體會被至少執行一次,這是它們的主要差別

案例:計算1+2+3+...+100

程式碼

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

for迴圈

雖然所有迴圈結構中都可以用while或者do...while表示,但Java提供了另一種語句——for迴圈,使一些迴圈結構變得更加簡單。

for迴圈語句是支援迭代的一種通用結構,是最有效、最靈活的迴圈結構

for迴圈執行的次數是在執行前確定的。語法格式如下

1.for迴圈格式:
for(初始化表示式1;布林表示式2;步進表示式4){
迴圈體3;
}
其它語句;

2.執行流程:
1,2(迴圈條件:true),3,4 --> 2(迴圈條件:true),3,4 --> ... --> 直到布林表示式2(迴圈條件:false)結束for迴圈,執行for迴圈後面的其它語句

無限迴圈(死迴圈)

for(;;)

列印九九乘法表

public class Demo {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "= " + i * j + "\t");
            }
            System.out.println();
        }
    }
}

輸出結果

增強for迴圈

Java5引入的一種主要用於陣列或集合的增強for迴圈

語法格式

for(宣告語句:表示式){
//程式碼語句
}

宣告語句:宣告新的區域性變數,該變數的型別必須和陣列/集合元素的型別匹配,其作用域限定在迴圈語句塊。其值與此時元素的值相等。

表示式:表示式是要訪問的陣列/集合名,或者是返回值為陣列/集合的方法。

程式碼

      int[] arr = {1,2,3};
        for (int i : arr) {
            System.out.println(i);
        }
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        for (Integer integer : arrayList) {
            System.out.println(integer);
        }