“這裡是雲端源想IT,幫你輕松學IT”
嗨~ 今天的你過得還好嗎?
不必行色匆匆
不必光芒四射
不必成為别人
隻需做自己
- 2023.08.04 -
循環結構是Java中非常重要的程式控制流程,它可以讓我們重複執行某些操作,實作複雜的算法和資料處理任務。今天這篇文章将介紹Java基礎中的循環結構。
一、什麼是循環結構?
循環結構是計算機程式設計中的一種常見的控制流程結構,用于重複執行某段代碼塊,直到滿足退出條件為止。循環由循環條件和循環體組成。
循環條件是一個邏輯表達式,在每次循環開始時判斷其是否滿足退出條件,如果滿足則跳出循環,否則繼續執行循環體。循環體是一段需要重複執行的代碼塊,通常包括多條語句。
循環結構可以通過計數器、标志變量、布爾表達式等方式來實作不同的循環控制方式。在程式設計中,使用循環結構可以簡化代碼邏輯,提高代碼複用性和可讀性,同時也可以實作很多複雜的算法和資料處理任務。
Java中的循環結構有以下幾種:
- for循環:用于循環執行已知次數的代碼塊,通常使用計數器來控制循環次數。
- while循環:用于執行不定次數的循環,條件表達式在循環開始時進行判斷,如果為true則執行循環體,否則跳過循環。
- do-while循環:與while循環類似,不同之處在于它會先執行一次循環體再進行判斷條件是否滿足,至少會執行一次循環體。
- 增強for循環(foreach循環):用于周遊集合或數組中的元素,可以省略初始化、判斷和更新三個部分,文法簡潔。
- break和continue語句:break用于跳出循環,continue用于跳過本次循環。這兩個語句通常與循環結構配合使用。
- 嵌套循環:将一個循環結構放在另一個循環結構内部,可以實作多層循環嵌套,通常應該盡量避免使用過多層嵌套循環,以提高程式效率。
下面分别來講解一下各種循環結構的詳細知識點及使用方法:
二、for循環
for循環主要用于循環次數已知的情況下。
文法格式:
for(初始表達式1; 條件表達式2; 步進表達式4){
//循環體3
}
//執行順序:1234->234->234->234->...
說明:
- 初始化語句: 用于表示循環開啟時的起始狀态,簡單說就是循環開始的時候什麼樣。
- 條件判斷語句:用于表示循環反複執行的條件,簡單說就是判斷循環是否能一直執行下去。
- 循環體語句: 用于表示循環反複執行的内容,簡單說就是循環反複執行的事情。
- 條件控制語句:用于表示循環執行中每次變化的内容,簡單說就是控制循環是否能執行下去。
執行流程如下:
執行順序:①②③④>②③④>②③④…②不滿足為止。
①負責完成循環變量初始化;
②負責判斷是否滿足循環條件,不滿足則跳出循環;
③具體執行的語句;
④循環後,循環條件所涉及變量的變化情況。
案例:
1、在控制台輸出1-5和5-1的資料。
public static void main(String[] args) {
//需求:輸出資料1-5
for(int i=1; i<=5; i++) {
System.out.println(i);
}
System.out.println("--------");
//需求:輸出資料5-1
for(int i=5; i>=1; i--) {
System.out.println(i);
}
}
2、求1~100之間的資料和,并把求和結果在控制台輸出。
public static void main(String[] args) {
//求和的最終結果必須儲存起來,需要定義一個變量,用于儲存求和的結果,初始值為0
int sum = 0;
//從1開始到100結束的資料,使用循環結構完成
/*
sum += i; sum = sum + i;
第一次:sum = sum + i = 0 + 1 = 1;
第二次:sum = sum + i = 1 + 2 = 3;
第三次:sum = sum + i = 3 + 3 = 6;
第四次:sum = sum + i = 6 + 4 = 10;
第五次:sum = sum + i = 10 + 5 = 15;
。。。
*/
for(int i=1; i<=100; i++) {
//将反複進行的事情寫入循環結構内部
// 此處反複進行的事情是将資料 i 加到用于儲存最終求和的變量 sum 中
sum += i;
}
System.out.println(sum);
}
3、在控制台輸出所有的“水仙花數”。
public static void main(String[] args) {
//輸出所有的水仙花數必然要使用到循環,周遊所有的三位數,三位數從100開始,到999結束
for(int i=100; i<1000; i++) {
//在計算之前擷取三位數中每個位上的值
int ge = i%10;
int shi = i/10%10;
int bai = i/10/10%10;
//判定條件是将三位數中的每個數值取出來,計算立方和後與原始數字比較是否相等
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
//輸出滿足條件的數字就是水仙花數
System.out.println(i);
}
}
}
三、while循環
while循環主要用于循環次數未知的情況下。
文法格式:
//初始表達式1
while(條件表達式2){
//表達式3
}
//執行順序:123->23->23->23->...
執行流程如下:
執行順序:①②③④>②③④>②③④…②不滿足為止。
①負責完成循環變量初始化。
②負責判斷是否滿足循環條件,不滿足則跳出循環。
③具體執行的語句。
④循環後,循環變量的變化情況。
案例:
世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米),假如我有一張足夠大的紙,它的厚度是0.1毫米。請問,我折疊多少次,可以折成珠穆朗瑪峰的高度?
public static void main(String[] args) {
//定義一個計數器,初始值為0
int count = 0;
//定義紙張厚度
double paper = 0.1;
//定義珠穆朗瑪峰的高度
int zf = 8844430;
//因為要反複折疊,是以要使用循環,但是不知道折疊多少次,這種情況下更适合使用while循環
//折疊的過程中當紙張厚度大于珠峰就停止了,是以繼續執行的要求是紙張厚度小于珠峰高度
while(paper <= zf) {
//循環的執行過程中每次紙張折疊,紙張的厚度要加倍
paper *= 2;
//在循環中執行累加,對應折疊了多少次
count++;
}
//列印計數器的值
System.out.println("需要折疊:" + count + "次");
}
四、do...while循環
do...while循環也是while循環,是以它也用于循環次數未知的情況下,但它與while循環的差別是,它會優先執行一次循環體的内容。
文法格式:
//初始表達式1
do {
//循環體2
}while(條件表達式3);
//執行順序:12->32->32->32->...
執行流程如下:
執行順序:①③④>②③④>②③④…②不滿足為止。
①負責完成循環變量初始化。
②負責判斷是否滿足循環條件,不滿足則跳出循環。
③具體執行的語句
④循環後,循環變量的變化情況
案例:
在控制台輸出10次Hello Word。
public static void main(String[] args) {
int x=1;
do {
System.out.println("hello world");
x++;
}while(x<=10);
}
關于三種循環語言的總結:
三種循環的差別
- for循環和while循環先判斷條件是否成立,然後決定是否執行循環體(先判斷後執行)
- do...while循環先執行一次循環體,然後判斷條件是否成立,是否繼續執行循環體(先執行後判斷)
for循環和while的差別
- for循環用在循環次數已知的情況下,可以控制周遊次數;
- while和do...while循環還可以用在循環次數未知的情況下。
三種循環的差別總結
- 建議使用的順序:for,while,do-while;
- 循環次數确定的話,建議使用for,循環次數不确定建議使用while;
- do-while循環來講的話,至少執行一次。
五、增強for循環
增強for循環(也稱為foreach循環)是Java 5中新增的一種文法結構,用于周遊數組和集合中的元素。它能夠以一種簡單、直覺的方式進行周遊,并且能夠避免普通for循環中可能會出現的越界錯誤。
文法格式:
for (資料類型 變量名 : 數組名/集合名) {
// 循環體代碼 }
其中,資料類型表示數組或集合中元素的類型,變量名表示目前周遊到的元素的變量名,數組名或集合名表示要周遊的數組或集合對象。在循環體内部,我們可以通過變量名來通路目前周遊到的元素,執行相應的操作。
案例:
對于一個整型數組nums,可以使用增強for循環來計算數組中所有元素的和。
int sum = 0;
for (int num : nums) {
sum += num;
}
需要注意的是,增強for循環主要用于周遊數組和集合等可疊代對象中的元素,不适用于其他場景。此外,在循環過程中不建議修改數組或集合的元素數量,否則可能會導緻循環出錯。
六、循環退出
在Java中,有兩種跳出循環的方式,分别是break和continue。
- Break:break表示跳出目前所在循環。
- Continue:跳出本次循環。
七、循環擴充
死循環
死循環:也就是循環中的條件永遠為true,死循環的是永不結束的循環。例如:while(true){}。
在後期的開發中,會出現使用死循環的場景,例如:我們需要讀取使用者輸入的輸入,但是使用者輸入多少資料我們并不清楚,也隻能使用死循環,當使用者不想輸入資料了,就可以結束循環了,如何去結束一個死循環呢,就需要使用到跳出語句了。
死循環(無限循環)的三種格式:
for(;;){}
while(true){}
do {} while(true);
變異循環
在前面介紹for循環時,介紹的是标準文法的for循環:
for(初始化表達式①; 布爾表達式②; 步進表達式④){
循環體③
}
除此之外,for循環還有一些變異文法:
初始化表達式①
for(; 布爾表達式②; ){
循環體③
步進表達式④
}
也就是說,可以把for循環的初始化表達式可以放在for循環語句之前,作為一個全局變量;步進表達式④可以放在for循環語句大括号内{}。
for(int i=0, j =1; i<100 && i >= 0; ){
System.out.println(i++);
}
int i=0, j =1
for(;i<100;){
System.out.println(i++);
}
八、嵌套循環
所謂嵌套循環,是指一個循環的循環體是另一個循環。比如for循環裡面還有一個for循環,就是嵌套循環。總共的循環次數=外循環次數*内循環次數。
嵌套循環格式:
for(初始化表達式①; 循環條件②; 步進表達式⑦) {
for(初始化表達式③; 循環條件④; 步進表達式⑥) {
執行語句⑤;
}
}
嵌套循環執行流程:
外循環一次,内循環多次(一圈)。
例如:月曆中 年與月的關系,時鐘中 分與秒的關系。如 2020年至2023年,一共3年,每年12個月。其中,年份看成外循環,月份看成内循環。
案例:
1. 使用嵌套循環,列印2021年至2023年月份,格式:xxxx年x月。
public static void main(String[] args) {
//列印2020年至2023年月份
//年份是外循環,3年;月份是内循環,12月
for (int i = 2020; i <= 2023; i++) {
for (int j = 1; j <= 12; j++) {
//不換行列印星号
System.out.print(i + "年" + j + "月 ");
}
//内循環列印12個月後,需要一次換行
System.out.println();
}
}
2. 列印一個九九乘法表。
public static void main(String[] args) {
//外層循環控制行
for (int i = 1; i <= 9; i++) {
// 内層循環控制列
for (int j = 1; j <= i; j++) {
//不換行\t表示制表符
System.out.print(i + "*" + j + "="+i*j+"\t");
}
// 需要一次換行
System.out.println();
}
}
除了常見的for循環、while循環、do-while循環外,增強for循環也是一種非常友善的周遊數組和集合元素的方式。在實際程式設計中,我們應該根據具體需求選擇不同的循環結構,并且注意循環條件、循環變量等的正确使用,以確定程式的正确性和高效性。
我們下期再見!
END
文案編輯|雲端學長
文案配圖|雲端學長
内容由:雲端源想分享