# 【循环语句】
##### 今日复习指南
~~~
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循环【了解】
~~~
![](https://img.kancloud.cn/64/08/64081c66c6a7a1e3ea7742a027bea3a2_1279x484.png)
### 第二章 循环语句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循环后面的其它语句
~~~
##### 图解分析:
![](https://img.kancloud.cn/1d/a1/1da14b3bac7ed41e71c796b141df8b66_809x472.png)
##### 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
}
}
~~~
图解分析:
![](https://img.kancloud.cn/03/83/03835945690c9142fcb7c562ef356a50_1316x516.png)
##### 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的值
注意:
不管是求和还是计数
求和变量和计数变量,必须定义在循环的外面
~~~
##### 计数思想:
![](https://img.kancloud.cn/64/e3/64e3e72e1c108eeeeac7a1f9e6e6a3ef_1206x517.png)
~~~
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循环后面的其它代码
~~~
##### 图解:
![](https://img.kancloud.cn/d2/ef/d2eff29e84c39d26a08c2a1c80e25b71_744x447.png)
##### 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后面的其它语句
~~~
##### 图解:
![](https://img.kancloud.cn/4b/0e/4b0ef7c867f2ccc7344dbca2f96a739f_751x440.png)
##### 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);
~~~