🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 【循环语句】 ##### 今日复习指南 ~~~ 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); ~~~