什么是循環(huán)結(jié)構(gòu):
循環(huán)是程序設(shè)計(jì)語言中反復(fù)執(zhí)行某寫代碼的一種計(jì)算機(jī)處理過程,是一組相同或相似語句被有規(guī)律的重復(fù)執(zhí)行。說白了就是反復(fù)執(zhí)行一段相同或相似的代碼
-
循環(huán)三要素:
循環(huán)變量的初始化
循環(huán)的條件(以循環(huán)變量為基礎(chǔ))
循環(huán)變量的改變(向著循環(huán)的結(jié)束變)
while語句的執(zhí)行邏輯:
計(jì)算boolean表達(dá)式的值
當(dāng)值為true則執(zhí)行語句塊,語句執(zhí)行完以后再次判斷boolean值,如果值還是為true則繼續(xù)執(zhí)行,如此循環(huán),直到boolean的值為false時(shí)退出while循環(huán)。
while語句案例演示:
public static void main(String[] args) {
int num = 1;
while (num <= 9) {
System.out.println(num + "*9=" + num * 9);
num++;
}
System.out.println("over");
}
說明:先判斷條件,在執(zhí)行,條件不滿足的時(shí)候,跳出循環(huán)。
- 注:一般情況下,循環(huán)操作中會(huì)存在循環(huán)的條件不滿足的可能性,否則將成為死循環(huán)
while語句使用break案例演示:
public static void main(String[] args) {
int i = 0;
while (i < 10) {
if (i == 5) {
break;
}
System.err.println("i的值為:" + i);
i++;
}
}
說明:
i的初始值為0,代碼進(jìn)入while塊中判斷,滿足條件,進(jìn)入if判斷,條件不滿足 i++,
當(dāng)i通過自加到5的時(shí)候,滿足if塊的條件,用break跳出循環(huán)。
do-while語句:
- 先計(jì)算boolean表達(dá)式,如果為true,再次執(zhí)行語句塊,如此循環(huán),直到為false為止。
do-while語句案例演示:
public static void main(String[] args) {
// 模擬用戶登錄
Scanner scan = new Scanner(System.in);
int pwd = 123; // 初始密碼
int i = 0;
System.err.println("初始密碼:" + pwd);
int guess; // 用戶輸入的密碼
do {
System.out.println("請(qǐng)輸入密碼!");
System.out.println("輸入密碼共有3次機(jī)會(huì)!"); // 告訴用戶,輸出錯(cuò)誤密碼的次數(shù)
guess = scan.nextInt();
if (i == 2) { // 計(jì)算錯(cuò)誤密碼次數(shù)
break; // 跳出循環(huán)
}
i++;
System.err.println("密碼輸入錯(cuò)誤次數(shù)為:" + i);
} while (guess != pwd);
if (guess == pwd) {
System.out.println("密碼正確");
} else {
System.out.println("密碼錯(cuò)誤");
}
}
說明:
先執(zhí)行do語句塊里的代碼,在判斷條件,條件為true時(shí),再次執(zhí)行語句塊,等條件為false時(shí),跳出循環(huán)。
-
while和do-while的區(qū)別
while:先判斷后執(zhí)行,有可能一次都不執(zhí)行
do-while:先執(zhí)行后判斷,至少會(huì)執(zhí)行一次
for語句的執(zhí)行邏輯:
for (int j = 0; j < args.length; j++) {
String string = args[j];
}
說明:
for (表達(dá)式1;表達(dá)式2;表達(dá)式3) {
語句塊(循環(huán)體)
}
for 語句案例演示:
for (int i = 0; i < 3; i++) {
System.err.println("學(xué)習(xí)Java");
}
System.err.println("條件不滿足,程序結(jié)束");
說明:
程序第一輪執(zhí)行順序:i=0,0<3(條件滿足),i++ 輸出循環(huán)體語句
程序第二輪執(zhí)行順序:i=1,1<3(條件滿足),i++ 輸出循環(huán)體語句
程序第三輪執(zhí)行順序:i=2,2<3(條件滿足),i++ 輸出循環(huán)體語句
程序第四輪執(zhí)行順序:i=3,3<3(條件不滿足)程序結(jié)束
死循環(huán)案例演示:
for (;;) {
System.err.println("學(xué)習(xí)Java");
}
說明:
當(dāng)所有表達(dá)式為空時(shí),進(jìn)入死循環(huán)狀態(tài)
break可用于循環(huán)語句或者switch語句中,可以使程序終止循環(huán)而執(zhí)行循環(huán)后面的語句,常常與條件語句一起使用。
continue 只能用于循環(huán)中,作用為跳過循環(huán)體中剩余語句,而執(zhí)行下一次循環(huán)
for循環(huán)中使用continue案例演示:
public static void main(String[] args) {
int num = 0;
for (int i = 1; i <= 100; i++) {
if (i % 10 == 3) {
continue;
}
num += i;
}
}
說明:
當(dāng)if條件滿足時(shí)continue跳過循環(huán)體中剩余的語句
程序執(zhí)行:
num = 0
i = 1 num = 0 + i(1)
i = 2 num = 1 + i(2)
i = 3 滿足條件,所以跳出剩余循環(huán)體中的語句。
以此類推,當(dāng)i 的值為101的時(shí)循環(huán)結(jié)束。
循環(huán)問題:
需要多次重復(fù)執(zhí)行一個(gè)或多個(gè)任務(wù)的問題考慮使用循環(huán)來解決,一般情況for循環(huán)使用最多。
-
循環(huán)問題定義——當(dāng)循環(huán):
- 如果業(yè)務(wù)轉(zhuǎn)換為當(dāng)這樣時(shí),優(yōu)先選擇while語句來實(shí)現(xiàn)。
-
循環(huán)問題定義——直到循環(huán):
- 如果業(yè)務(wù)轉(zhuǎn)換為直到這樣時(shí),優(yōu)先選擇do-while語句來實(shí)現(xiàn)。
-
循環(huán)問題定義——固定次數(shù)循環(huán):
- 如果業(yè)務(wù)中獲取一個(gè)確切的循環(huán)次數(shù),考慮for循環(huán)。