首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 入門教程:第四章 流程控制陳述式完整指南

     編輯:Java 程式設計入門

章節概覽

Java 程式透過流程控制執行,程式流程由若干陳述式組成。陳述式可為單一行(如 c=a+b;)或以大括號 {} 包裹的複合陳述式。本章介紹三大類流程控制陳述式:

  1. 分支陳述式:if-else, break, switch, return
  2. 迴圈陳述式:while, do-while, for, continue
  3. 例外處理陳述式:try-catch-finally, throw

最後簡介註解陳述式。

§ 4.1 分支陳述式

提供控制機制,使程式執行可跳過特定陳述式,轉而執行指定陳述式。

4.1.1 條件陳述式 if-else

語法:

if (boolean-expression)
    statement1;
[else
    statement2;]

重點規則:

  • boolean-expression 必須回傳布林型別(比 C/C++ 嚴格)
  • 每個單一陳述式後必須有分號
  • 建議單一陳述式也用 {} 包裹,提升可讀性與擴充性
  • else 為選擇性
  • 條件為 true 執行 statement1,否則執行 statement2

特殊形式(多重條件):

if (expression1) {
    statement1;
} else if (expression2) {
    statement2;
} ...
} else if (expressionM) {
    statementM;
} else {
    statementN;
}

else 不能單獨作為陳述式,必須與 if 配對,總是與最近的 if 配對,可用 {} 改變配對關係。

範例 4.1:比較兩數大小並由小到大輸出

public class CompareTwo {
    public static void main(String args[]) {
        double d1=23.4, d2=35.1;
        if (d2 >= d1)
            System.out.println(d2 + " >= " + d1);
        else
            System.out.println(d1 + " >= " + d2);
    }
}

輸出:35.1 >= 23.4

範例 4.2:判斷閏年(三種實作方式對比)

public class LeapYear {
    public static void main(String args[]) {
        int year = 1989;
        // 方法 1:單一邏輯表達式
        if ((year%4==0 && year%100!=0) || (year%400==0))
            System.out.println(year + " is a leap year.");
        else
            System.out.println(year + " is not a leap year.");

        year = 2000;
        // 方法 2:if-else 特殊形式
        boolean leap;
        if (year%4 != 0) leap = false;
        else if (year%100 != 0) leap = true;
        else if (year%400 != 0) leap = false;
        else leap = true;
        System.out.println(leap ? year + " is a leap year." : year + " is not a leap year.");

        year = 2050;
        // 方法 3:巢狀 if-else 配合大括號配對
        if (year%4 == 0) {
            if (year%100 == 0) {
                if (year%400 == 0) leap = true;
                else leap = false;
            } else leap = true;
        } else leap = false;
        System.out.println(leap ? year + " is a leap year." : year + " is not a leap year.");
    }
}

輸出:
1989 is not a leap year.
2000 is a leap year.
2050 is not a leap year.

4.1.2 多分支陳述式 switch

語法:

switch (expression) {
    case value1: statement1; break;
    case value2: statement2; break;
    ...
    case valueN: statementN; break;
    [default: defaultStatement;]
}

規則:

  • expression 可回傳基本型別值(整數、字元等)
  • case 值必須為常數且互不相同
  • default 為選擇性,無匹配時執行
  • break 終止 switch 執行,避免貫穿;特殊情況多個 case 共用操作可省略 break
  • case 區塊多行陳述式可不加 {}
  • 功能可用 if-else 實作,但 switch 更簡潔、可讀性高、執行效率佳

範例 4.3:依考試等級輸出百分制分數區間

public class GradeLevel {
    public static void main(String args[]) {
        char grade = 'C';
        switch (grade) {
            case 'A': System.out.println(grade + " is 85~100"); break;
            case 'B': System.out.println(grade + " is 70~84"); break;
            case 'C': System.out.println(grade + " is 60~69"); break;
            case 'D': System.out.println(grade + " is <60"); break;
            default: System.out.println("input error");
        }
        // 展示無 break 的貫穿行為與多 case 共用操作
    }
}

4.1.3 break 陳述式

  1. 在 switch 中終止執行,從 switch 後第一句繼續
  2. 可標記程式碼區塊 Label: { ... },break Label; 跳出指定區塊
  3. Java 無 goto,但 break 實現部分跳轉功能,避免破壞可讀性與編譯優化

4.1.4 return 陳述式

從當前方法退出,回到呼叫處繼續執行。兩種形式:

  • return expression;:回傳值,型別必須與方法宣告一致
  • return;:void 方法使用,不回傳值

單獨 return 置於方法中間會造成編譯錯誤(後續程式碼不可達),但可嵌入 if-else 等條件結構中提前退出。

§ 4.2 迴圈陳述式

迴圈包含四部分:初始化、迴圈本體、迭代、終止條件。Java 提供三種迴圈:

4.2.1 while 迴圈(「當型」迴圈)

[initialization]
while (termination) {
    body;
    [iteration;]
}
  • 先判斷條件,滿足才執行本體
  • 初始化與迭代為選擇性

4.2.2 do-while 迴圈(「直到型」迴圈)

[initialization]
do {
    body;
    [iteration;]
} while (termination);
  • 先執行本體,再判斷條件
  • 本體至少執行一次

4.2.3 for 迴圈(「當型」迴圈)

for (initialization; termination; iteration) {
    body;
}
  • 先初始化,判斷條件,執行本體,最後迭代,再重新判斷
  • 初始化部可宣告變數,作用域限於整個 for
  • 常用於已知迴圈次數(如陣列遍歷),也可用於未知次數
  • 初始化與迭代部可用逗號陳述式執行多操作:for(i=0,j=10; i
  • 三部皆可為空(但分號不可省),全空即無限迴圈

4.2.4 continue 陳述式

  • 結束本次迴圈,跳過本體剩餘陳述式,直接進行終止條件判斷(for 先執行迭代)
  • 可標記外層迴圈 continue outerLabel; 跳至外層迴圈繼續

範例 4.4:三種迴圈分別實作累加求和 (1+...+10=55)

public class Sum {
    public static void main(String args[]) {
        // while
        int n=10, sum=0;
        while(n>0) { sum+=n; n--; }
        // do-while
        n=0; sum=0;
        do { sum+=n; n++; } while(n<=10);
        // for
        sum=0;
        for(int i=1; i<=10; i++) sum+=i;
    }
}

範例 4.5:求 100~200 間所有質數(巢狀 for 搭配 continue outer)

public class PrimeNumber {
    public static void main(String args[]) {
        int n=0;
        outer: for(int i=101; i<200; i+=2) {
            int k=15;
            for(int j=2; j<=k; j++) {
                if(i%j==0) continue outer;
            }
            System.out.print(" " + i);
            if(++n < 10) continue;
            System.out.println(); n=0;
        }
    }
}

輸出 21 個質數,每行 10 個。

§ 4.3 例外處理陳述式

包含 try, catch, finally, throw,為 Java 獨有機制,第八章詳述。

§ 4.4 註解陳述式

三種形式:

  • //:單行註解,從 // 開始至行尾
  • /* ... */:多行註解,不可巢狀嵌套
  • /** ... */:JavaDoc 專用文件註解,支援 @ 標籤識別特殊變數,javadoc 工具可生成 HTML 文件
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved