Java 程式透過流程控制執行,程式流程由若干陳述式組成。陳述式可為單一行(如 c=a+b;)或以大括號 {} 包裹的複合陳述式。本章介紹三大類流程控制陳述式:
if-else, break, switch, returnwhile, do-while, for, continuetry-catch-finally, throw最後簡介註解陳述式。
提供控制機制,使程式執行可跳過特定陳述式,轉而執行指定陳述式。
語法:
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 配對,可用 {} 改變配對關係。
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
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.
語法:
switch (expression) {
case value1: statement1; break;
case value2: statement2; break;
...
case valueN: statementN; break;
[default: defaultStatement;]
}
規則:
expression 可回傳基本型別值(整數、字元等)case 值必須為常數且互不相同default 為選擇性,無匹配時執行break 終止 switch 執行,避免貫穿;特殊情況多個 case 共用操作可省略 breakcase 區塊多行陳述式可不加 {}if-else 實作,但 switch 更簡潔、可讀性高、執行效率佳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 共用操作
}
}
switch 中終止執行,從 switch 後第一句繼續Label: { ... },break Label; 跳出指定區塊goto,但 break 實現部分跳轉功能,避免破壞可讀性與編譯優化從當前方法退出,回到呼叫處繼續執行。兩種形式:
return expression;:回傳值,型別必須與方法宣告一致return;:void 方法使用,不回傳值單獨 return 置於方法中間會造成編譯錯誤(後續程式碼不可達),但可嵌入 if-else 等條件結構中提前退出。
迴圈包含四部分:初始化、迴圈本體、迭代、終止條件。Java 提供三種迴圈:
[initialization]
while (termination) {
body;
[iteration;]
}
[initialization]
do {
body;
[iteration;]
} while (termination);
for (initialization; termination; iteration) {
body;
}
forfor(i=0,j=10; ifor 先執行迭代)continue outerLabel; 跳至外層迴圈繼續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;
}
}
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 個。
包含 try, catch, finally, throw,為 Java 獨有機制,第八章詳述。
三種形式:
//:單行註解,從 // 開始至行尾/* ... */:多行註解,不可巢狀嵌套/** ... */:JavaDoc 專用文件註解,支援 @ 標籤識別特殊變數,javadoc 工具可生成 HTML 文件