# 【循環語句】
##### 今日復習指南
~~~
1.for循環(1.5個小時內完成,80%的內容搞定,while的重要程度比for要低)
(1)Demo03ForSum5.java 求1-5的數字之和
? (2)Demo03ForCountSXH.java ? ? ? 打印并統計所有的水仙花數字及個數
? ?
2.while語句(半個小時內完成,20%的內容搞定):
(1)Demo02WhileZF.java 珠穆拉瑪峰案例
3.其它知識(15分鐘)
? (1)循環區別
? (2)死循環
~~~
##### 今日內容
~~~
循環的概念和組成【理解】
for循環語句【重點中的重點】
while循環語句【重點】
do while循環語句【了解】
~~~
### 第一章 循環結構【理解】
##### 1.1 循環概述
~~~
循環的概念: 重復性的執行某些固定的功能,當條件不成立時,結束循環
說白了: 條件成立執行操作,條件不成立停止操作
~~~
##### 1.2 循環組成
~~~
1.循環的組成(手寫100遍HelloWorld案例): :
(1)【初始化表達式1】準備工作:筆墨伺候,最優先唯一執行一次的操作
(2)【循環條件2】條件判斷:每次書寫前,判斷一下,要不要寫
(3)【循環體3】循環所要進行的操作:手寫一個HelloWorld案例
(4)【步進表達式4】掃尾的工作:每寫一次HelloWorld,計數(+1)
? ? ? ?
2.執行流程:
1,2(循環條件: true),3,4 --> 2(循環條件: true),3,4 --> ... --> 直到2(循環條件: false),結束循環
3.循環的分類:
(1)for循環【重點中的重點】
(2)while循環【重點】
(3)do-while循環【了解】
~~~

### 第二章 循環語句1--for【必須掌握】
##### 2.1 **for循環語句介紹**
~~~
1.for循環格式:
for(初始化表達式1;布爾表達式2;步進表達式4){
? ? ? ?循環體3;
? }
其它語句;
?
2.執行流程:
1,2(循環條件:true),3,4 --> 2(循環條件:true),3,4 --> ... --> 直到布爾表達式2(循環條件:false)結束for循環,執行for循環后面的其它語句
? ?
~~~
##### 圖解分析:

##### 2.2 for循環練習1
~~~
需求:
在控制臺輸出5次HelloWorld
public class Demo01ForHello {
? ?public static void main(String[] args) {
? ? ? ?//count: 0,1,2,3,4 count<5:true 執行循環體
? ? ? ?//count: 5 count<5 ==> 5<5 ==> false 結束for循環
? ? ? ?for (int count = 0; count < 5; count++) {
? ? ? ? ? ?System.out.println("HelloWorld...."+count);
? ? ? }
? ? ? ?System.out.println("for...end...");
?
? ? ? ?//times: 1,2,3,4,5 times<=5: true 執行循環體
? ? ? ?//times: 6 times<=5 ==> 6<=5 ==> false 結束for循環
? ? ? ?for (int times = 1; times <= 5; times++) {
? ? ? ? ? ?System.out.println("HelloWorld...."+times);
? ? ? }
? ? ? ?System.out.println("for...end...");
? }
}
?
~~~
##### 2.3 for循環練習2
~~~
需求:
在控制臺輸出1-5和5-1的數據
public class Demo02For5 {
? ?public static void main(String[] args) {
? ? ? ?//在控制臺輸出1-5
? ? ? ?for (int num = 1; num <= 5; num++) {
? ? ? ? ? ?System.out.println(num);
? ? ? }
? ? ? ?System.out.println("for...end");
?
? ? ? ?//在控制臺輸出5-1
? ? ? ?//count: 5,4,3,2,1 count>=1 true: 執行循環體
? ? ? ?//count: 0 count>=1 false: 結束for循環
? ? ? ?for (int count = 5; count >= 1; count--) {
? ? ? ? ? ?System.out.println(count);
? ? ? }
? ? ? ?System.out.println("for...end");
? }
}
~~~
##### 2.4 for循環練習3
~~~
需求:
求1-5之間的數據和,并把求和結果在控制臺輸出
? ? ? ?
實現步驟:
1.定義int變量sum,初始值0,用來累加求和
2.使用for循環,獲取1-5的數字,保存到循環變量i中
2.1循環體中: 把當前循環變量i的值累加到求和變量sum中
3.打印sum的值
~~~
~~~
public class Demo03ForSum5 {
public static void main(String[] args) {
//1.定義int變量sum,初始值0,用來累加求和
int sum = 0;
/*
第一次: sum: 0,i: 1
i <= 5 ==> 1<=5 ==> true 執行循環體 sum = sum + i = 0 + 1 = 1 i: 2
第二次: sum:1 i: 2
i <= 5 ==> 2<=5 ==> true 執行循環體 sum = sum + i = 1 + 2 = 3 i: 3
第三次: sum:3 i: 3
i <= 5 ==> 3<=5 ==> true 執行循環體 sum = sum + i = 3 + 3 = 6 i: 4
第四次: sum:6 i: 4
i <= 5 ==> 4<=5 ==> true 執行循環體 sum = sum + i = 6 + 4 = 10 i: 5
第五次: sum:10 i: 5
i <= 5 ==> 5<=5 ==> true 執行循環體 sum = sum + i = 10 + 5 = 15 i: 6
第六次: sum:15 i: 6
i <= 5 ==> 6<=5 ==> false 不再執行循環體,直接結束for循環,執行for后面的其它語句
*/
//2.使用for循環,獲取1-5的數字,保存到循環變量i中
for (int i = 1; i <= 5; i++) {
//2.1循環體中: 把當前循環變量i的值累加到求和變量sum中
sum = sum + i;//簡寫: sum += i
}
//3.打印sum的值
System.out.println("1-5的數字之和: "+sum);
//1,2,3,4,5
}
}
~~~
圖解分析:

##### 2.5 for循環練習4
~~~
需求:
求1-100之間的偶數和,并把求和結果在控制臺輸出
實現步驟:
1.定義int變量sum,初始值0,用來累加求和
2.使用for循環,獲取1-100的數字,保存到循環變量num中
2.1判斷如果循環變量num中的數字是偶數: num%2==0
2.2把當前循環變量中的偶數數字,累加到求和變量sum中
3.for循環結束打印sum的值
~~~
~~~
public class Demo04ForSumOu {
public static void main(String[] args) {
//1.定義int變量sum,初始值0,用來累加求和
int sum = 0;
//2.使用for循環,獲取1-100的數字,保存到循環變量num中
for (int num = 1; num <= 100; num++) {
//2.1判斷如果循環變量num中的數字是偶數: num%2==0
if (num % 2 == 0) {
//2.2把當前循環變量中的偶數數字,累加到求和變量sum中
sum += num;
}
}
//3.for循環結束打印sum的值
System.out.println("1-100的偶數數字之和: "+sum);
System.out.println("------------------");
//1.定義int變量sum2,初始值0,用來累加求和
int sum2 = 0;
//2.使用for循環,獲取1-100的偶數數字,保存到循環變量num中
for(int num =0; num<=100;/*num++,num++*//*num+=2*/num = num + 2) {
//2.1把循環變量num中的偶數數字,累加到求和變量sum中
sum2 += num;
//System.out.println(num);
}
System.out.println("1-100的偶數數字之和: "+sum2);
}
}
~~~
##### 2.6 for循環練習5
~~~
需求:
鍵盤錄入一個三位數字,獲取個位,十位,百位,并輸出
實現步驟:
1.創建鍵盤錄入Scanner類的對象
2.獲取鍵盤錄入的整數數字,保存到int變量num中
3.如果num中的數字是三位數字,求個位,十位,百位,分別保存到int變量ge,shi,bai中
4.打印個十百位
5.不是三位數字給出提示信息
總結: 求數字num的個位,十位,百位,千位
個位: num%10
十位: num/10%10
百位: num/100%10
千位: num/1000%10
~~~
~~~
public class Demo01GeShiBai {
public static void main(String[] args) {
//1.創建鍵盤錄入Scanner類的對象
Scanner sc = new Scanner(System.in);
//2.獲取鍵盤錄入的整數數字,保存到int變量num中
System.out.println("請輸入一個整數數字: ");
int num = sc.nextInt();
//int num = 123;
//3.如果num中的數字是三位數字
if(num>=100 && num<=999) {
//求個位,十位,百位,分別保存到int變量ge,shi,bai中
//123 ÷ 10 = 12(商: /) ... 3(余數: %)
int ge = num%10;//個位
//12 ÷ 10 = 1(商: /) ... 2(余數: %)
//System.out.println(12%10);
//System.out.println(123/10%10);
int shi = num/10%10;//十位
//System.out.println(123/10/10%10);
int bai = num/100%10;//百位,如果確定是三位數字,最后%10可以省略
//4.打印個十百位
System.out.println("個位: "+ge);
System.out.println("十位: "+shi);
System.out.println("百位: "+bai);
} else {
//5.不是三位數字給出提示信息
System.out.println("您輸入的數字: "+num+"不是三位數字....");
}
//System.out.println(1234/100%10);
}
}
~~~
##### 2.7 for循環練習6
~~~
需求:
在控制臺輸出所有的“水仙花數”
解釋:什么是水仙花數?
水仙花數,指的是一個三位數,個位、十位、百位的數字立方和等于原數
例如 153 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 + 1 = 153
實現步驟:
1.使用for循環獲取所有的三位數字,保存到循環變量num中
1.1計算循環變量num中當前三位數字的個位,十位,百位,分別保存到int變量ge(個位),shi(十位),bai(百位)中
1.2計算個位,十位,百位數字的立方和,保存到int變量sum中
1.3判斷如果該三位數字的立方和sum 等于該三位數字num: 說明是水仙花數字
1.4打印該水仙花數字
~~~
~~~
public class Demo02ForSXH {
public static void main(String[] args) {
//1.使用for循環獲取所有的三位數字,保存到循環變量num中
for (int num = 100; num <= 999; num++) {
//System.out.println(num);
//1.1計算循環變量num中當前三位數字的個位,十位,百位,分別保存到int變量ge(個位),shi(十位),bai(百位)中
int ge = num%10;//個位
int shi = num/10%10;//十位
int bai = num/100%10;//百位
//1.2計算個位,十位,百位數字的立方和,保存到int變量sum中
int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;
//1.3判斷如果該三位數字的立方和sum 等于該三位數字num: 說明是水仙花數字
if (sum == num) {
//1.4打印該水仙花數字
System.out.println(num);
}
}
}
}
~~~
##### 2.8 for循環練習7
~~~
需求:
在控制臺輸出所有的“水仙花數”及總個數
解釋:什么是水仙花數?
水仙花數,指的是一個三位數,個位、十位、百位的數字立方和等于原數
例如 153 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 + 1 = 153
實現步驟:
0.定義int變量count,初始值0,用來統計水仙花數字的數量
1.使用for循環獲取所有的三位數字,保存到循環變量num中
1.1計算循環變量num中當前三位數字的個位,十位,百位,分別保存到int變量ge(個位),shi(十位),bai(百位)中
1.2計算個位,十位,百位數字的立方和,保存到int變量sum中
1.3判斷如果該三位數字的立方和sum 等于 該三位數字num: 說明是水仙花數字
1.4打印該水仙花數字
1.5計數器count的值,增加1 (count = count + 1,count++)
2.for循環結束后,打印count的值
注意:
不管是求和還是計數
求和變量和計數變量,必須定義在循環的外面
~~~
##### 計數思想:

~~~
public class Demo03ForCountSXH {
public static void main(String[] args) {
//0.定義int變量count,初始值0,用來統計水仙花數字的數量
int count = 0;
//1.使用for循環獲取所有的三位數字,保存到循環變量num中
for (int num = 100; num <= 999; num++) {
//System.out.println(num);
//1.1計算循環變量num中當前三位數字的個位,十位,百位,分別保存到int變量ge(個位),shi(十位),bai(百位)中
int ge = num%10;//個位
int shi = num/10%10;//十位
int bai = num/100%10;//百位
//1.2計算個位,十位,百位數字的立方和,保存到int變量sum中
int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;
//1.3判斷如果該三位數字的立方和sum 等于該三位數字num: 說明是水仙花數字
//if ((ge*ge*ge + shi*shi*shi + bai*bai*bai) == num) {
if (sum == num) {
//1.4打印該水仙花數字
System.out.println(num);
//1.5計數器count的值,增加1 (count = count + 1,count++)
count++;
}
}
//2.for循環結束后,打印count的值
System.out.println("以上水仙花數字總共有: "+count+" 個");
}
}
~~~
### 第三章 循環語句2--while【重點】
##### 3.1 while循環語句介紹
~~~
1.while循環格式:
初始化表達式1;
while(布爾表達式2){
循環體3;
步進表達式4;
}
其它語句;
2.執行流程:
1,2(循環條件: true),3,4 --> 2(循環條件: true),3,4 --> ... --> 直到布爾表達式2(循環條件: false),結束while循環,直接執行while循環后面的其它代碼
~~~
##### 圖解:

##### 3.2 while循環練習1
~~~
需求:
在控制臺輸出5次HelloWorld
public class Demo01While {
public static void main(String[] args) {
//使用for循環
for (int i = 1; i <= 5; i++) {
System.out.println("HelloWorld...."+i);
}
System.out.println("for...end...");
//使用while循環
int j = 1;//初始化表達式1
//j: 1,2,3,4,5 j<=5: true 執行循環體
//j: 6 j<=5: false 結束while循環,執行后面的其它代碼
while(j<=5){//j<=5: 布爾表達式2
System.out.println("HelloWorld...."+j);//循環體3
j++;//步進表達式4
}
System.out.println("while....end....");
}
}
~~~
##### 3.3 while循環練習2
~~~
需求:
世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米),假如我有一張足夠大的紙,它的厚度是0.1毫米。
請問,我折疊多少次,可以折成珠穆朗瑪峰的高度?
折紙(折疊后的厚度是原有厚度的2倍,而不是平方的關系):
原來: 0.1 paper
第一次: 0.1*2: 0.2 paper = paper * 2
第二次: 0.2*2: 0.4
第三次: 0.4*2: 0.8
第四次: 0.8*2: 1.6
...
實現步驟:
1.定義int變量count,初始值0,用來統計折疊紙張的次數
2.定義2個double變量zf(珠峰的高度)和paper(紙張的厚度),分別代表珠峰的高度和紙張的厚度,并根據題目需求進行初始化
3.使用while循環,完成折疊紙張達到珠峰的高度
3.1布爾表達式,循環條件: 只要折疊后的紙張高度 小于 珠峰的高度 paper < zf
3.2循環體: 折疊一次紙張,使得紙張的厚度變為原來的2被 paper = paper *2 或者 paper *= 2
3.3步進表達式: 計數器count的值增加1
4.while循環結束,打印count的值
~~~
~~~
public class Demo02WhileZF {
public static void main(String[] args) {
//1.定義int變量count,初始值0,用來統計折疊紙張的次數
int count = 0;
//2.定義2個double變量zf(珠峰的高度)和paper(紙張的厚度),分別代表珠峰的高度和紙張的厚度,并根據題目需求進行初始化
double zf = 8844430,paper = 0.1;
//3.使用while循環,完成折疊紙張達到珠峰的高度
//3.1布爾表達式,循環條件: 只要折疊后的紙張高度 小于 珠峰的高度 paper < zf
while (paper < zf) {
//3.2循環體: 折疊一次紙張,使得紙張的厚度變為原來的2被 paper = paper *2 或者 paper *= 2
paper *= 2;//paper = paper *2
//3.3步進表達式: 計數器count的值增加1
count++;
//System.out.println("折疊第"+count+"次紙張的厚度: "+paper);
}
//4.while循環結束,打印count的值
System.out.println("總共折疊次數: "+count);
//System.out.println("折疊后紙張的最終厚度: "+paper);//1.34217728E7 ==> 13421772.8 8844430
}
}
~~~
### 第四章 循環語句3--do-while
##### 4.1 do-while循環語句介紹
~~~
1.do-while循環格式:
初始化表達式1;
do {
循環體3;
步進表達式4;
} while(布爾表達式2);
其它語句;
2.執行流程:
1,3,4 --> 2(循環條件:true),3,4 --> 2(循環條件:true),3,4 --> ... --> 直到布爾表達式2(循環條件:false)的結果為false,解釋do-while循環,執行do-while后面的其它語句
~~~
##### 圖解:

##### 4.2 do-while循環練習1
~~~
do-while循環練習:
在控制臺輸出5次HelloWorld
/*
do-while循環練習:
在控制臺輸出5次HelloWorld
*/
public class Demo01DoWhile {
public static void main(String[] args) {
int i = 1;//初始化表達式1
do {
System.out.println("HelloWorld...."+i);//循環體3
i++;//步進表達式4
} while(i<=5);//布爾表達式2 i: 6 6<=5: false 結束do-while循環,執行后面的其它語句
System.out.println("do...while...end");
}
}
~~~
### **第五章** 循環語句其它知識【理解】
##### 5.1 循環語句的區別
~~~
三種循環的區別總結
1.建議使用的順序: for,while,do-while
2.循環次數確定的話,建議使用for,循環次數不確定建議使用while 【后面有使用場景】
循環次數不確定需要先寫成死循環的格式【while好看】 --------后天講解
3.do-while循環來講的話,至少執行一次
4.while和do-while循環而言,循環結束后,初始化條件中定義的變量可以繼續使用,
但是for循環的不能使用(在for循環內部定義初始化語句)
~~~
~~~
/*
do-while循環來講的話,至少執行一次
以下說法正確的是:ABCEF
A: for循環是先判斷條件,后執行循環體
B: while循環是先判斷條件,后執行循環體
C: do-while循環是先執行循環體,后判斷條件
D: for和while至少執行一次
E: for和while可以一次都不執行
F: do-while而言至少執行一次
*/
public class Demo02LoopDiff {
public static void main(String[] args) {
//for循環: 先判斷條件,后執行循環體
//目前: 第一次執行時循環條件 i > 5 ==> 3 > 5 ==> false 不執行循環體,直接結束for循環
//總結: 如果第一次條件都不成立,for循環的循環體,一次都不執行
for (int i = 3; i > 5; i--) {
System.out.println("Hello...for...");
}
//while循環: 先判斷條件,后執行循環體
//目前: 第一次執行時循環條件 j > 5 ==> 3 > 5 ==> false 不執行循環體,直接結束while循環
//總結: 如果第一次條件都不成立,while循環的循環體,一次都不執行
int j = 3;
while(j > 5) {
System.out.println("Hello...while...");
j--;
}
//do-while循環: 先執行循環體,后判斷條件
//所以: 第一次的條件是否成立,不關心,直接執行循環體,循環體執行完畢后,
//執行判斷條件: k>5 ==> 2>5: false 結束do-while循環
int k = 3;
do {
System.out.println("Hello...do...while...");
k--;
} while(k>5);//2>5: false 結束do-while循環
}
}
~~~
~~~
/*
while和do-while循環而言,循環結束后,初始化條件中定義的變量可以繼續使用,
但是for循環的不能使用(在for循環內部定義初始化語句,只能在for循環內部使用)
*/
public class Demo03LoopDiff {
public static void main(String[] args) {
//在for循環內部定義的變量,只能在for循環內部使用
//出了for循環就不能使用了
for (int i = 1; i <= 3; i++) {
System.out.println("Hello...for..." + i);
}
//錯誤: i是在for循環內部定義的,只能在for循環內部使用
//System.out.println("Hello...for...end..."+i);
int j = 1;
while (j <= 3) {
System.out.println("Hello...while..." + j);
j++;
}
//while循環初始化表達式中定義的變量,是在while循環外面定義的
//while循環結束后,變量可以繼續使用
System.out.println("Hello...while...end..." + j);//4
int k = 1;
do {
System.out.println("Hello...do...while..." + k);
k++;
} while (k <= 3);
//do-while循環初始化表達式中定義的變量,是在do-while循環外面定義的
//do-while循環結束后,變量可以繼續使用
System.out.println("Hello...do...while...end..." + k);//4
}
}
~~~
##### 5.2 死循環
~~~
1.概念: 永不休止的循環
2.分類:
(1)for循環的死循環格式: for芬芬
for(;;){
...
}
(2)while循環的死循環格式 -------推薦使用
while(true){
...
}
(3)do-while循環的死循環格式
do {
...
} while(true);
public class Demo04DeadLoop {
public static void main(String[] args) {
//for: 死循環
/*for (int i = 3; i > 0; ) {
System.out.println("Hello");
}*/
/*for (; true; ) {
System.out.println("Hello");
}*/
//for: 死循環
//不寫布爾表達式2,默認值true
//for循環()中的三個式子,可以都不寫,但是必須保留兩個分號
/*for (; ;) {
System.out.println("Hello");
}*/
//while: 死循環
/*int i = 3;
while (i > 0) {
System.out.println("Hello");
}*/
/*while(true) {
System.out.println("Hello");
}*/
//do-while: 死循環
do {
System.out.println("Hello");
} while(true);
}
}
~~~
##### 總結
~~~
能夠使用for循環完成一個范圍的數據求和
求1-5數字之和
//定義int變量sum,初始值0,用來累加求和
int sum = 0;
//使用for循環獲取1-5的數字,每個數字保存到循環變量num中
for(int num = 1;num<=5;num++) {
//把num中的數字累加到求和變量sum中
sum += num;
}
sout(sum);
能夠使用for循環完成統計水仙花個數
//定義int變量count,初始值0,用來統計水仙花數字的個數
int count = 0;
//使用for循環獲取每個三位的數字,每個數字保存到循環變量num中
for(int num = 100;num<=999;num++) {
//計算循環變量num中的三位數字的個位,十位,百位
int ge = num%10;//個位
int shi = num/10%10;//十位
int bai = num/100%10;//百位
//計算num中的三位數字的個位,十位,百位的立方和,保存到int變量sum中
int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;
//判斷num中的三位數字個位,十位,百位的立方和 sum 等于 三位數字num本身: 說明是水仙花數字
if(sum == num) {
//打印這個數字
sout(num);
//計數器增加1
count++;
}
}
//循環結束,打印計數器count的值
sout(count);
能夠知道三種循環的區別【了解中的了解】
1.for,while: 先判斷條件,后執行循環體,可以一次都不執行
2.do-while: 先執行循環體,后判斷條件,至少執行一次
3.for循環內部初始表達式中定義的變量,出了for循環就不能使用了
4.while和do-while: 初始化表達式中定義的變量,while和do-while結束后,仍然可以繼續使用
能夠使用while循環完成珠穆朗瑪峰案例
//定義int變量count,初始值0,用來統計折疊紙張的次數
int count = 0;
//定義2個double變量zf和paper,分別代表珠峰的高度和紙張的厚度,并分別初始化
double zf = ...,paper = ...;
//使用while循環
while(paper<zf) {
paper *= 2;//折疊一次,厚度翻倍
count++;//計數器增加1
}
sout(count);
~~~