今日目标
  1. for循环
  2. while循环
  3. do...while循环
  4. 控制跳转语句
一、循环1、for循环1.1 问题

1、循环的概述 2、Java中循环的分类 3、for循环的格式 4、for循环的执行流程

1.2 答案1.2.1 概述

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句。

1.2.2 Java中循环分类1.2.3 for循环格式

for (初始化语句;条件判断语句;条件控制语句) { 循环体语句; }

格式解释:

1.2.4 for循环执行流程

①执行初始化语句

②执行条件判断语句,看其结果是true还是false

如果是false,循环结束

如果是true,继续执行

③执行循环体语句

④执行条件控制语句

⑤回到②继续

java中循环流程的语句有哪些(java语言中循环的种类以及用法)(1)

1.3 注意事项

1.for循环初始化语句定义变量的作用范围:定义的()以及{}内,出了这个范围就失效 2.循环 { } 中定义的变量,在每一轮循环结束后,都会从内存中释放 3.循环 ( ) 中定义的变量,在整个循环结束后,都会从内存中释放 示例代码: for (int i = 1; i <= 5; i ) { int a = 10; System.out.println(a); } //System.out.println(i); 循环外面是无法输出的 //System.out.println(a); 循环外面是无法输出的 4.循环语句 ( ) 和 { } 之间不要写分号 for (int i = 1; i <= 5; i ); { System.out.println("HelloWorld"); } 5.条件控制语句的使用。条件控制语句别名:步进语句 i 一次增加1 i-- 一次减少1 i =2 一次增加2

1.4 练习

int a=1; for(System.out.println("a"); a<=3; System.out.println("c"),a ){ System.out.println("b"); } //控制台打印结果是多少

2、for案例-输出1-5

示例代码:

1 正向 for(int i = 1; i <= 5; i ){ System.out.println(i); } 2 反向 for(int i = 5; i >= 1; i--){ System.out.println(i); }

3、for案例-求1-5和

示例代码:

//定义求和变量 int sum = 0;//串羊肉串,你需要一根签子,上面肯定啥也没有 //1.定义求和变量sum,初始化值为0, //作用:将1-5之间的每一个数据累加到sum上进行求和操作 int sum = 0; //2.循环1-5,每循环一次,获取一个数据值 for(int i = 1; i <= 5; i ){ //3.累加求和 //sum = sum i; //简化操作 sum = i; } //4.输出结果 System.out.println("数据1-5的和为:" sum);

4、for案例-1-100偶数和

需求:求1-100之间的偶数和,并把求和结果在控制台输出

示例代码:

//传统写法 //1.定义求和变量sum,初始化值为0 int sum = 0; //2.循环1-100,每循环一次,获取一个数据值 for(int i = 1; i <= 100; i ){ //3.判断当前循环中变量i保存的数据值是不是偶数 if(i % 2 ==0){ //4.是偶数进行累加求和 sum = i; } } //5.循环结束,数据求和完毕,打印求和结果 System.out.println("数据1-100的偶数和为:" sum); //改进写法 //1.定义求和变量sum,初始化值为0 int sum = 0; for(int i = 0; i <= 100; i =2){//0 2 4 6 sum = i; //System.out.println("数据1-100的偶数和为:" sum); //输出sum放在循环中打印的是求和的过程 } //注意:把求和变量定义在循环中 for(int i = 1; i <= 5; i ){ int sum = 0;//在循环中,每循环一次,重新定义一次sum并初始化值为0 sum = i; System.out.println(sum); } /*奇数 for(int i = 1; i <= 100; i =2){//1 3 5 7 } */

5、for案例-水仙花数

需求:在控制台输出所有的”水仙花数“

解释:什么是水仙花数?

水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数

例如:153 3 * 3 * 3 5 * 5 * 5 1 * 1 * 1 = 153

分析:

  1. 水仙花数是一个三位数
  2. 水仙花数的个位、十位、百位的数字立方和等于原数
  3. 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取
  4. 需要判定,获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数

示例代码:

//1.for循环从100开始到999结束,每循环一次获取一个三位正整数 for(int i = 100; i <= 999; i ){ //2.循环内获取当前i保存的数据值的个位十位百位 int ge = i % 10; int shi = i / 10 % 10; int bai = i / 100; //3.判断是否满足水仙花数的条件 if(ge*ge*ge shi*shi*shi bai*bai*bai == i){ //4.打印水仙花数 System.out.println(i); } }

6、for案例-水仙花数(每行打印两个)

需求:在控制台输出所有的“水仙花数”,要求每行打印2个

解释:

  1. 不换行打印,去掉ln
  2. System.out.print("打印内容");
  3. 换行打印
  4. System.out.println();//不加内容只起到换行的作用
  5. 计数器的使用

分析:

  1. 定义变量count,用于保存“打印过”的数量,初始值为0
  2. 在判定和打印水仙花数的过程中,不换行,并在打印后让count变量 1,记录打印过的数量
  3. 在每一次count变量 1后,判断是否到达了2的倍数,是的话,换行。

public static void main(String[] args){ // 1. 定义一个计数器,初始值为0 int count = 0; // 2.for循环从100开始到999结束,每循环一次获取一个三位正整数 for(int i = 100; i <= 999; i ){ // 3.循环内获取当前i保存的数据值的个位十位百位 int ge = i % 10; int shi = i / 10 % 10; int bai = i / 10 / 10 % 10; // 4.判断是否满足水仙花数的条件 if( (ge*ge*ge shi*shi*shi bai*bai*bai) == i){ // 不换行打印水仙花数 System.out.print(i " "); // 每打印一次水仙花数记录一次 count ; // 判断当前打印的是第几次 if(count % 2 == 0){//2 4 6 8.. System.out.println();//换行 } } } }

总结:今后如果需求带有统计xxx,请先想到计数器变量

7、while循环7.1 问题

1、格式 2、执行流程

7.2 答案7.2.1 while格式

初始化语句; while (条件判断语句) { 循环体语句; 条件控制语句; }

7.2.2 while执行流程

①执行初始化语句

②执行条件判断语句,看其结果是true还是false

如果是false,循环结束

如果是true,继续执行

③执行循环体语句

④执行条件控制语句

⑤回到②继续

java中循环流程的语句有哪些(java语言中循环的种类以及用法)(2)

示例代码:

public class WhileDemo { public static void main(String[] args) { //需求:在控制台输出3次 黑马程序员 //while循环实现 int j = 1; while(j<=3) { System.out.println("黑马程序员"); j ; } } }

7.3 注意事项8、while案例-珠穆朗玛峰

需求:

世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。 请问,我折叠多少次,可以折成珠穆朗玛峰的高度?

分析:

  1. 因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用while循环
  2. 循环的执行过程中每次纸张折叠,纸张的厚度要加倍,因此需要先定义纸张厚度,在循环中使厚度加倍
  3. 折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度
  4. 设置一个计数器,在循环中执行累加,对应折叠了多少次

示例代码

//1.定义计数器count,初始值为0 int count = 0; //2.使用while循环,直到折叠厚度达到珠峰高度为止 double paper = 0.1; while(paper <= 8844430){ paper *= 2;//条件控制语句,纸张厚度每次折叠是原来的2倍 count ; } //输出结果 System.out.println("一共需要折叠" count "次");

练习:

for循环改写珠穆朗玛峰

//for循环改写珠穆朗玛峰案例 //1.定义计数器count,初始值为0 int count = 0; for(double paper = 0.1; paper <= 8844430 ;paper *= 2){ //条件控制语句,纸张厚度每次折叠是原来的2倍 count ; } //输出结果 System.out.println("一共需要折叠" count "次");

9、do...while循环9.1 问题

1、do...while格式 2、do...while执行流程 3、do...while特点

9.2 答案9.2.1 格式

初始化语句; do { 循环体语句; 条件控制语句; }while(条件判断语句);

9.2.2 执行流程

① 执行初始化语句

② 执行循环体语句

③ 执行条件控制语句

④ 执行条件判断语句,看其结果是true还是false

如果是false,循环结束;如果是true,继续执行

⑤ 回到②继续

java中循环流程的语句有哪些(java语言中循环的种类以及用法)(3)

示例代码:

public class DoWhileDemo { public static void main(String[] args) { //do...while循环实现 int j = 1; do { System.out.println("HelloWorld"); j ; }while(j>=5); } }

9.2.3 特点

无论条件判断语句结果是否为true,都要执行一次循环体

10、三种循环的区别10.1 问题

1、三种循环的区别 2、for和while的区别以及使用场景

10.2 答案10.2.1 三种循环的区别

for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)

do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)

10.2.2 for和while的区别以及使用场景

区别:

条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了

条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用

使用场景:

注意:

手动改写 for 循环格式后,将不存在区别,for 循环能够实现的 while 都能实现,反之也一样

int i = 0; for(; i < 4; i ;) { } System.out.println(i); // 正常使用

for循环补充:

//for循环的变换写法 int i=0; for(;i<10;i ){//第一个部分可以省略 System.out.println("123"); } for(int i=0;;i ){//死循环 如果省略循环条件 那么系统默认为true; System.out.println("123"); } for(int i=0;i<10;){//死循环 System.out.println("123"); //i ;//也可以写在这里 } for(;;){//都能省略 死循环 System.out.println("123"); }

11、死循环11.1 问题

1、死循环的格式 2、死循环的注意点

11.2 答案11.2.1 死循环的格式

for(;;){} while(true){} do{}while(true);

注意:while的死循环格式是最常用的

11.2.2 死循环的注意点

死循环单独使用没有意义(不能单独书写在那里),需要配合跳转控制语句来使用(当达到某种条件的时候去结束死循环)

//举例:录入数据1-100,输入错误需要重新输入直到正确为止 int num = sc.nextInt(); while(true){ if(num >= 1 && num <= 100){ //使用某个语句结束循环 }else { //不满足条件就重新录入 num = sc.nextInt(); } } //结束循环到这里,使用正确的数据

12、跳转控制语句12.1 问题

1、概述 2、分类

12.2 答案12.2.1 概述

跳转控制语句是用于在循环的过程中,控制循环运行的。

12.2.2 分类

continue 【跳过】某次循环体内容的执行,继续下一次的执行

break 【终止】循环体内容的执行,也就是说结束当前的整个循环

注意:break可以用于分支语句switch中,执行对应的case匹配项之后用来结束switch语句

示例代码:

// continue public static void main(String[] args) { for (int i = 1; i <= 24; i ) { if(i == 4){ continue; } System.out.println(i "层到了"); } } // break public static void main(String[] args) { for (int i = 20; i <= 80; i ) { if(i == 60){ break; } System.out.println(i "层到了"); } }

13、循环标号-减肥计划改进版

需求:

程序运行后,用户可多次查询星期对应的减肥计划,直到输入0,程序结束

实现思路:

① 业务功能是多次进行,此处需要循环

② 不明确循环次数,采用while循环

③ 匹配到0的时候,使用break结束循环

import java.util.Scanner; public class Test{ public static void main(String[] args){ //创建键盘录入对象 Scanner sc = new Scanner(System.in); loop:while(true){ System.out.println("请输入您要查看的星期数:"); System.out.println("如无需查看其它,请输入0退出"); int choice = sc.nextInt(); //退出方式1: /*if(choice == 0){ System.out.println("感谢您的使用!"); break; }*/ switch(choice){ //退出方式2: /*case 0: System.out.println("感谢您的使用!"); System.exit(0);//结束JVM break;*/ //退出方式3: case 0: System.out.println("感谢您的使用!"); break loop; case 1: System.out.println("珍珠奶茶"); break; case 2: System.out.println("海底捞"); break; case 3: System.out.println("撸串"); break; case 4: System.out.println("麻辣香锅"); break; case 5: System.out.println("水煮鱼"); break; case 6: System.out.println("来顿牛蛙"); break; case 7: System.out.println("哈啤酒"); break; default: System.out.println("输入错误!"); break; } } } }

注意:

break和continue只能跳出、跳过自己所在的那一层关系,如果想要跳出、跳过指定的一层,就可以加入标号

14、Random随机数

介绍:Random 跟 Scanner 类似,也是 Java 写好的类,其作用是产生随机数

14.1 问题

Random随机数使用步骤

14.2 答案14.2.1 使用步骤

import java.util.Random;

Random r = new Random(); //r 是变量名,可以变,其他的都不允许变

//小扩号中的数字代表一个范围, 如果传入10;生成的就是10以内的随机数, 也就是 0-9 int num = r.nextInt(10); //获取数据的范围:[0,10) 包括0,不包括10

15、案例-猜数字

需求:

程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?

当猜错的时候根据不同情况给出相应的提示

实现思路 :

代码实现:

public class Test { public static void main(String[] args) { Random r = new Random(); Scanner sc = new Scanner(System.in); // 1. 使用 Random 产生 1-100之间的随机数 int randomNum = r.nextInt(100) 1; // 2. 使用 Scanner 键盘录入用户猜的数据 System.out.println("请输入:"); // 4. 将【录入数据】 【if 判断】 使用循环包裹 while (true) { int scNum = sc.nextInt(); // 3. 使用 if 语句进行比对 if (scNum > randomNum) { System.out.println("猜大了"); } else if (scNum < randomNum) { System.out.println("猜小了"); } else { System.out.println("猜中了"); // 5. 猜中后,通过break结束循环 break; } } } }

16、补充循环嵌套

1 打印5行5列的星星 for (int i = 0; i < 5; i ) { for (int j = 0; j < 5; j ) { System.out.print("* "); } System.out.println(); } * * * * * * * * * * * * * * * * * * * * * * * * * for (int i = 0; i < 5; i ) { for (int j = 0; j <=i; j ) { System.out.print("* "); } System.out.println(); } * * * * * * * * * * * * * * * 2 九九乘法表 for (int i = 1; i <=9; i ) { for(int j=1;j<=i;j ){ System.out.print(j "*" i "=" (j*i) '\t'); } System.out.println(); } 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

,