一、簡介
- 順序結構的程式陳述句只能被執行一次,如果您想要同樣的操作執行多次,就需要使用回圈結構,
- Java中有三種主要的回圈結構:
- 'while'回圈
- 'do...while'回圈
- 'for'回圈
- 在Java5中還引入了一種主要用于陣列的增強型for回圈:'foreach'回圈,
二、'while'回圈
語法:
while (/* 布爾運算式 */) {
/* 回圈體 */
}
描述:
- 'while'回圈是Java最基本的回圈,
- 在'while'回圈剛開始時,會計算一次'布爾運算式'的值,若條件為真,執行回圈體,然后重復上面步驟,只要布爾運算式為'true',回圈就會一直執行下去,
- 而對于后來每一次額外的回圈,都會在開始前重新計算一次判斷是否為真,直到條件不成立,則'while'回圈結束,
注意:
- 除了特殊要求,通常要讓回圈停止下來,我們需要一個讓運算式失效的方式來結束回圈,方式有:回圈體內部控制、外部設立標志位等,
- 回圈條件一直為'true'就會造成'死回圈',我們正常的業務編程中應該盡量避免死回圈,會影響程式性能,甚至造成程式卡死奔潰,
示例:
/* 計算1加到100的和,結果為在控制臺輸出:5050 */
public static void main(String[] args) {
int i = 0;
int sum = 0;
/* i不大于100時就會一直回圈 */
while (i <= 100) {
sum += i;
i++;
}
System.out.println(sum);
}
三、'do...while'回圈
語法:
do {
/* 回圈體 */
} while (/* 布爾運算式 */);
描述:
- 'do…while'回圈和'while'回圈相似,不同的是,'while'回圈先判斷后執行,'do...while'回圈是先執行后判斷,'do…while'回圈即使不滿足條件,也至少會執行回圈體一次,
注意:
- 'do…while'回圈的布爾運算式在回圈體的后面,所以陳述句塊在檢測布爾運算式之前已經執行了,
- 如果布爾運算式的值為'true',則陳述句塊一直執行,直到布爾運算式的值為'false',
示例:
/* 結果為在控制臺依次輸出:5050 101 */
public static void main(String[] args) {
int i = 0;
int sum = 0;
do {
sum += i;
i++;
} while (i <= 100);
System.out.println(sum);
do {
System.out.println(i);
} while (i <= 100);
}
四、'for'回圈
語法:
for (/* 初始化陳述句 */;/* 布爾運算式 */;/* 迭代陳述句 */) {
/* 回圈體 */
}
描述:
- 雖然所有回圈結構都可以用'while'回圈或者'do...while'回圈表示,但Java提供了另一種陳述句: 'for'回圈,使一些回圈結構變得更加簡單,
- 'for'回圈陳述句是支持迭代的一種通用結構,是最有效、最靈活的回圈結構,最常使用,
- 'for'回圈執行的次數是在執行回圈體前就確定的,
- 'for'回圈在知道回圈次數的情況下,簡化了代碼,提高了可讀性,
執行順序:
- 最先執行初始化陳述句,可以初始化同一種型別的一個或多個回圈控制變數,該陳述句可以為空,
- 然后,檢測布爾運算式的值,如果為'true',回圈體被執行;如果為'false',回圈終止,
- 執行一次回圈體后,接著執行迭代陳述句,更新回圈控制變數,
- 重復執行上面二、三兩步:布爾運算式 -> 回圈體 -> 迭代陳述句,直到布爾運算式結果為'false',
示例:
/* 使用嵌套for回圈在控制臺列印九九乘法表 */
public static void main(String[] args) {
/* 外層for回圈控制當前列印第幾行 */
for (int i = 1; i <= 9; i++) {
/* 內層for回圈控制當前這一行的輸出 */
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (i * j) + "\t");
}
/* 控制臺列印的換行陳述句 */
System.out.println();
}
}
五、'foreach'回圈
語法:
for (/* 變數宣告陳述句 */ : /* 陣列或集合實體 */) {
/* 回圈體 */
}
描述:
- Java5引入了一種主要用于陣列或集合的增強型'for'回圈:'foreach'回圈,
注意:
- 變數宣告陳述句:宣告新的區域變數,該變數的型別必須和陣列或集合的元素型別匹配,該變數的作用域限定在回圈體代碼塊內,在每次回圈中,其指向的物件為當前遍歷到的陣列或集合的元素,
- 陣列或集合實體:指要遍歷的陣列或集合實體的變數名,或者是回傳值為陣列或集合的方法,
示例:
/* 結果為在控制臺依次輸出:10 20 30 40 50 */
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
for (int i : numbers) {
System.out.println(i);
}
}
六、'break' & 'continue'關鍵字
Ⅰ、'break'關鍵字
描述:
- 'break'關鍵字主要用在回圈陳述句或者’switch‘陳述句中,用來跳出整個陳述句塊,
- 'break'關鍵字用于強行退出回圈結構,不執行該回圈結構中剩余的陳述句和剩余的回圈,
注意:
- 若有多層嵌套的回圈結構,'break'關鍵字會跳出其所在的回圈陳述句塊,并且繼續執行該回圈陳述句塊下面的陳述句,
示例:
/* 結果為在控制臺輸出了1至30 */
public static void main(String[] args) {
int i = 0;
while (i <= 100) {
i++;
System.out.println(i);
if (i == 30) {
break;
}
}
}
Ⅱ、'continue'關鍵字
描述:
- 'continue'關鍵字適用于任何Java的回圈結構中,作用是讓程式立刻跳轉到該回圈結構的下一次回圈的迭代,
- 'continue'關鍵字用在回圈體中,用于終止回圈結構的某次回圈程序,即跳過回圈體中尚未執行的陳述句,接著進行下一次是否執行回圈的判定,
注意:
- 在'for'回圈中,'continue'關鍵字使程式立即跳轉到迭代陳述句,
- 在'while'回圈或者'do…while'回圈中,'continue'關鍵字使程式立即跳轉到布爾運算式的判斷陳述句,
示例:
/* 結果為在控制臺依次輸出:1 3 4 */
public static void main(String[] args) {
int i = 0;
while (i < 4) {
i++;
if (i == 2) {
continue;
}
System.out.println(i);
}
}
Ⅲ、帶標簽的'break' & 'continue'
描述:
-
'goto'關鍵字很早就在程式設計語言中出現,常用來實作條件轉移, 構成回圈,跳出回圈體等功能,
-
在Java中'goto'是一個保留字,但并未在Java中得到正式使用,然而,在'break'和'continue'這兩個關鍵字的身上,我們仍然能看出一些'goto'的影子:帶標簽的'break' & 'continue',
-
'標簽'指后面跟一個冒號的識別符號,例如:
labelName:
- 對Java來說,唯一用到'標簽'的地方是在回圈結構之前,而在回圈結構之前設定標簽的唯一理由是:我們希望在回圈結構中嵌套另一個或多個回圈結構,且在內層回圈結構中能夠直接跳轉到外層回圈結構,而'break'和'continue'關鍵字通常只能中斷當前回圈結構,但若隨同標簽使用,它們就會中斷到存在標簽的地方,
示例:
/* 列印100到150之間的質數,結果為在控制臺依次輸出:101 103 107 109 113 127 131 137 139 149 */
public static void main(String[] args) {
outer:
for (int i = 100; i <= 150; i++) {
for (int j = 2; j < i / 2; j++) {
if (i % j == 0) {
continue outer;
}
}
System.out.println(i);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/203885.html
標籤:Java
