Java流程控制語句最全匯總(上篇)

前文

本章是關於Java流程控制語句的最全匯總,本篇為匯總上篇。

流程是人們生活中不可或缺的一部分,它表示人們每天都在按照一定的流程做事。

比如出門搭車、上班、下班、搭車回傢。這其中的步驟是有順序的。

程序設計也需要有流程控制語句來完成用戶的要求,根據用戶的輸入決定程序要進入什麼流程,即“做什麼”以及“怎麼做”等。

從結構化程序設計角度出發,程序有 3 種結構:順序結構、選擇結構和循環結構。

若是在程序中沒有給出特別的執行目標,系統則默認自上而下一行一行地執行該程序,這類程序的結構就稱為順序結構。

到目前為止,我們所編寫的程序都屬於順序結構。

但是事物的發展往往不會遵循早就設想好的軌跡進行,因此,所設計的程序還需要能夠具有在不同的條件下處理不同問題以及當需要進行一些相同的重復操作時,如何能省時省力地解決問題的能力。

在本章中,我們將對 Java 程序中的上述3種流程結構進行學習。

初學者應該對本章的每個小節進行仔細閱讀、思考,這樣才能達到事半功倍的效果。

Java語句:Java空語句、復合語句和表達式語句

按照語句的組成部分,可以將順序結構中的語句分為表達式語句、空語句和復合語句 3 大類。

下面首先介紹 Java 中語句的編寫方式,然後對這 3 類語句進行詳細介紹。

語句編寫方式

在 Java 中,語句是最小的組成單位,每個語句必須使用分號作為結束符。

除此之外,Java 對語句無任何其他限制,開發人員可以很隨意地用符合自己風格的方式編寫語句。

例如,可以將一個語句放在多行中,示例如下:

String str = "Apple "
+"Banner "+"Pear "
+" Orange";

由於 Java 使用分號作為語句的結束符,所以上面的 3 行代碼會被 Java 認為是一條語句,因為這 3 行中隻有一個分號。

但是,我們不推薦使用這種方式來編寫語句。

同樣,因為使用分號作為分隔符,將多個語句放在一行來編寫也是允許的。

例如,下面的示例代碼也是正確的。

int a=0,b,c;b=a+10;b++;c=a*b;System.out.println(c);

上面將 5 個語句放在一行中。

為瞭使程序語句排列得更加美觀、容易閱讀和排除錯誤,一般使用如下規則格式化源代碼。

在一行內隻寫一個語句,並采用空格、空行來保證語句容易閱讀。

在每個復合語句內使用 Tab 鍵向右縮進。大括號總是放在單獨的一行,便於檢查是否匹配。

空語句

所謂空語句(Empty Statement),它在程序中什麼都不做,也不包含具有實際性的語句。

在程序中,空語句主要用來作為空循環體。

空語句的語法格式如下:

; // 其實就是一個分號

執行一個空語句就是將控制轉到該語句的結束點。

這樣,如果空語句是可到達的,則空語句的結束點也是可到達的。

表達式語句

在很多的高級語言中,有專門的賦值語句。

而在 Java 中將賦值作為一個運算符,因此隻有賦值表達式。

在賦值表達式後面添加分號就成瞭獨立的語句。

以下是一些表達式的示例語句:

3.1415926;
(a+b)/2;
x*y*z-y+(20-x);

這些表達式能夠被 Java 編譯器識別,但是由於沒有對程序進行任何操作,因此無任何意義。

一般表達式語句應該能完成一個操作,如修改變量的值或者作為函數參數等。

具體方法是,在表達式的左側指定一個變量來存儲表達式的值,或者將表達式傳遞給函數。

以下是修改後的表達式語句:

pi = 3.1415926;
output(pi); // 將pi的值傳遞到output()函數中作為參數
sum = (a+b)/2;
printf("%f",sum); // 將sum的值傳遞到printf()函數輸出
temp = x*y*z-y+(20-x); // 將表達式的值保存到temp變量中

復合語句

復合語句又稱為語句塊,是很多個語句的組合,從而可以將多個語句看作單個語句。

復合語句的語法格式如下:

{ statement-list // 語句列表}

可以看到由一個擴在大括號內的可選 statement-list 組成。

statement-list 是由一個或者多個語句組成的列表,如果不存在 statement-list,則稱該語句塊是空的。

它的執行規則如下:

  • 如果語句塊是空的,控制轉到語句塊的結束點。
  • 如果語句塊不是空的,控制轉到語句列表。當控制到達語句列表的結束點時,控制轉到語句的結束點。

例 1

創建一個語句塊,該語句塊包含 3 條語句。

{
    width = 10; // 為width變量賦值
    height = 90; // 為height變量賦值
    area = width * height; // 計算width變量和height變量的乘積
}

上述代碼執行後,sum 變量的值為 900。

上述的語句塊中大括號內包含瞭 3 條語句。

第一條語句為 width 變量賦值,第二條語句為 height 變量賦值,第三條語句則將 width 和 height 相乘,結果保存在 sum 變量中。

Java if else分支結構精講

Java 支持兩種選擇語句:if 語句和 switch 語句。

其中 if 語句使用佈爾表達式或佈爾值作為分支條件來進行分支控制,而 switch 語句則用於對多個整型值進行匹配,從而實現分支控制。

這些語句允許你隻有在程序運行時才能知道其狀態的情況下,控制程序的執行過程。

如果你沒有 C/C++ 的編程背景,你將會為這兩個語句的強大功能和靈活性而感到吃驚。

選擇結構(也叫分支結構)解決瞭順序結構不能判斷的缺點,可以根據一個條件判斷執行哪些語句塊。

選擇結構適合於帶有邏輯或關系比較等條件判斷的計算。

例如,判斷是否到下班時間,判斷兩個數的大小等。

if 結構

if 語句是使用最多的條件分支結構,它屬於選擇語句,也可以稱為條件語句。

if 選擇結構是根據條件判斷之後再做處理的一種語法結構。

默認情況下,if 語句控制著下方緊跟的一條語句的執行。不過,通過語句塊,if 語句可以控制多個語句。

if 語句的最簡語法格式如下,表示“如果滿足某種條件,就進行某種處理”。

if (條件表達式) { 語句塊;}

其中“條件表達式”和“語句塊”是比較重要的兩個地方。

  1. 條件表達式:條件表達式可以是任意一種邏輯表達式,最後返回的結果必須是一個佈爾值。取值可以是一個單純的佈爾變量或常量,也可以是使用關系或佈爾運算符的表達式。如果條件為真,那麼執行語句塊;如果條件為假,則語句塊將被繞過而不被執行。
  2. 語句塊:該語句塊可以是一條語句也可以是多條語句。如果僅有一條語句,可省略條件語句中的大括號 {}。當從編程規范角度不要省略大括號,省略大括號會使程序的可讀性變差。

if 條件語句的運行流程如圖 1 所示。

img

圖1 if 語句執行流程圖

例 1

編寫一個 Java 程序,允許用戶從鍵盤輸入一個數字,再判斷該數是否大於 100。使用 if 語句的實現代碼如下:

public static void main(String[] args) {
    System.out.println("請輸入一個數字:");
    Scanner input = new Scanner(System.in);
    int num = input.nextInt(); // 接收鍵盤輸入數據
    // 判斷用戶輸入的數據是否大於100
    if (num > 100) {
        System.out.println("輸入的數字大於100");
    }
    // 判斷用戶輸入的數據是否等於100
    if (num == 100) {
        System.out.println("輸入的數字等於100");
    }
    // 判斷用戶輸入的數據是否小於100
    if (num < 100) {
        System.out.println("輸入的數字小於100");
    }
}

運行該程序,分別使用鍵盤輸入 99、100 和 105,結果如下所示:

請輸入一個數字:
99
輸入的數字小於100
請輸入一個數字:
100
輸入的數字等於100
請輸入一個數字:
105
輸入的數字大於100

例 2

假設有 num1 和 num2 兩個變量,它們的值分別是 50 和 34。

下面編寫程序,要求使用 if 語句判斷 num1 和 num2 的大小關系,並輸出比較結果。

實現代碼如下:

public static void main(String[] args) {
    int num1 = 50;
    int num2 = 34;
    if (num1 > num2) {
        System.out.println("num1大於num2");
    }
    if (num1 == num2) {
        System.out.println("num2等於num2");
    }
    if (num1 < num2) {
        System.out.println("num1小於num2");
    }
}

該段選擇語句判斷瞭 num1 值和 num2 值的大於、等於和小於關系。此處 num1 為 50,num2 為 34,所以執行後會輸出“num1 大於 num2”。

例 3

在上述兩個案例代碼中,由於每個 if 語句的語句塊中隻包含一條語句,所以省略瞭大括號。

本實例在登錄系統中要求用戶名、密碼和驗證碼都必須正確,否則將顯示登錄失敗及錯誤提示。

 其中的語句塊有多條語句,所以需要使用大括號。代碼如下:

public static void main(String[] args) {
    String username = "admin"; // 用戶名
    String userpass = "123456"; // 密碼
    String code = "0000"; // 驗證碼
    if (username != "admin" && userpass != "123456" && code != "0000") {
        System.out.println("登錄失敗!");
        System.out.println("請檢查輸入的用戶名、密碼和驗證碼是否正確!");
    }
}

在這裡為 if 語句設置瞭一個復雜的復合表達式來驗證登錄條件。執行後的輸出結果如下:

登錄失敗!
請檢查輸入的用戶名、密碼和驗證碼是否正確!

if-else 結構

單 if 語句僅能在滿足條件時使用,而無法執行任何其他操作(停止)。

而結合 else 語句的 if 可以定義兩個操作,此時的 if…else 語句表示“如果條件正確則執行一個操作,否則執行另一個操作”。

使用 if…else 語句的語法格式如下所示:

if (表達式) {
    語句塊1;
} else {
    語句塊2;
}

在上述語法格式中,如果 if 關鍵字後面的表達式成立,那麼就執行語句塊 1,否則的話則執行語句塊 2,其運行流程如圖 2 所示。

img

圖2 if…else 運行流程

例 4

在例 3 中為實現比較 num1 和 num2 的大小,使用瞭 3 個 if 條件語句分別判斷大於、等於和小於的情況。

下面使用 if…else 雙條件來實現,具體代碼如下:

public static void main(String[] args) {
    int num1 = 50;
    int num2 = 34;
    // 如果num1等於num2
    if (num1 == num2) {
        System.out.println("num1等於num2");
    }
    // 如果num1大於num2
    if (num1 > num2) {
        System.out.println("num1大於num2");
    } else {
        // 否則就是num1小於num2
        System.out.println("num1小於num2");
    }
}

雙條件語句減少瞭代碼的編寫量,同時增強瞭程序的可讀性。

簡化後的結果還是一樣,執行後會輸出“num1 大於 num2”。

多條件 if-else-if 語句

if 語句的主要功能是給程序提供一個分支。

然而,有時候程序中僅僅多一個分支是遠遠不夠的,甚至有時候程序的分支會很復雜,這就需要使用多分支的 if…else if 語句。

通常表現為“如果滿足某種條件,就進行某種處理,否則如果滿足另一種條件才執行另一種處理……,這些條件都不滿足則執行最後一種條件”。

if…else if 多分支語句的語法格式如下所示:

if(表達式1) {
    語句塊1;
} else if(表達式2) {
    語句塊2;
...
} else if(表達式n) {
    語句塊n;
} else {
    語句塊n+1;
}

可以看出,else-if 結構實際上是 if-else 結構的多層嵌套。

明顯的特點就是在多個分支中隻執行一個語句組,而其他分支都不執行,所以這種結構可以用於有多種判斷結果的分支中。

在使用 if…else if 語句時,依次判斷表達式的值,當某個分支的條件表達式的值為 true 時,則執行該分支對應的語句塊,然後跳到整個 if 語句之外繼續執行程序。

如果所有的表達式均為 false,則執行語句塊 n+1,然後繼續執行後續程序,其運行流程如圖 3 所示。

img

圖3 if…else if 語句的執行流程

例 5

同樣以比較 num1 和 num2 的大小為例,使用 if…else if 多條件的實現代碼如下:

public static void main(String[] args) {
    int num1 = 50;
    int num2 = 34;
    if (num1 == num2) { // 如果num1等於num2
        System.out.println("num1等於num2");
    } else if (num1 > num2) { // 如果num1大於num2
        System.out.println("num1大於num2");
    } else { // 否則就是小於
        System.out.println("num1小於num2");
    }
}

如上述代碼所示,num1 和 num2 不滿足 if 語句的“num1==num2”條件,接著測試 else if 的“num1>num2”條件,滿足該條件並輸出“num1 大於 num2”。

例 6

假設某學校對成績的判斷標準是:不低於 90,可以評為優秀;低於 90 但不低於 80,可以評為良好;低於 80 但不低於 60,可以評為中等;否則評為差。

public static void main(String[] args) {
    System.out.println("請輸入考試成績:");
    Scanner input = new Scanner(System.in);
    int score = input.nextInt(); // 接收鍵盤輸入數據
    if (score >= 90) { // 考試成績>=90
        System.out.println("優秀");
    } else if (score >= 80) { // 90>考試成績>=80
        System.out.println("良好");
    } else if (score >= 60) { // 80>考試成績>=60
        System.out.println("中等");
    } else { // 考試成績<60
        System.out.println("差");
    }
}

當考試成績為 90 分以上時,則執行第一個 if 語句,下面的 3 個條件判斷語句不會執行;當考試成績為 80 分以上 90 分以下時,則執行第一個 else if 語句;當考試成績在 60~80 分,並且包含 60 分的成績,則執行第二個 else if 語句;如果上述 3 個條件都不滿足,則執行 else 語句。

程序運行後的輸出效果如下所示:

請輸入考試成績:
100
優秀
請輸入考試成績:
88
良好
請輸入考試成績:
50

嵌套 if 的使用

if 語句的用法非常靈活,不僅可以單獨使用,還可以在 if 語句裡嵌套另一個 if 語句。

同樣,if…else 語句和 if…else if 語句中也可以嵌套另一個 if 結構的語句,以完成更深層次的判斷。

嵌套 if 的語法格式如下:

if(表達式1) {
    if(表達式2) {
        語句塊1;
    } else {
        語句塊2;
    }
} else {
    if(表達式3) {
        語句塊3;
    } else if(表達式4) {
        語句塊4;
    } else {
        if(表達式n) {
            語句塊n;
        } else {
            語句塊n+1;
        }
    }
}

在上述格式中,應該註意每一條 else 與離它最近且沒有其他 else 對應的 if 相搭配,其執行流程如圖 4 所示。

img

圖4 嵌套 if 語句執行流程

例 7

活動計劃安排,如果今天是工作日,去上班;如果今天是周末,則出去遊玩;同時,如果周末天氣晴朗,去室外遊樂場遊玩,否則去室內遊樂場遊玩。實現代碼如下:

public static void main(String[] args) {
    String today = "周末";
    String weather = "晴朗";
    if (today.equals("周末")) {
        if (weather.equals("晴朗")) {
            System.out.println("去室外遊樂場遊玩");
        } else {
            System.out.println("去室內遊樂場遊玩");
        }
    } else {
        System.out.println("去上班");
    }
}

如上述代碼所示,today 滿足 if 語句的“today.equals(“周末”)”條件,接著測試 weather 是否滿足“weather.equals(“晴朗”)”條件,滿足該條件輸出“去室外遊樂場遊玩”。

到此這篇關於Java流程控制語句最全匯總(上篇)的文章就介紹到這瞭,其他兩個部分的內容(中、下篇)請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: