最新Java基础系列课程--Day03-Java程序流程控制(二)https://developer.aliyun.com/article/1423481
下面我们把三种循环的区别给同学们总结一下
1. for循环 和 while循环(先判断后执行); do...while (先执行后判断) 2.for循环和while循环的执行流程是一模一样的, 功能上无区别,for能做的while也能做,反之亦然。 如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。 3 for循环中控制循环的变量只在循环中使用 while循环中,控制循环的变量在循环后还可以继续使用
3.6 死循环
同学们在写代码时,可能一不小心把代码写成了死循环,所谓死循环就是停不下来的循环。
接下来,带着同学们认识几种死循环的写法。然后再说一下死循环有什么用。
//for死循环 for ( ; ; ){ System.out.println("Hello World1"); } //while死循环 while (true) { System.out.println("Hello World2"); } //do-while死循环 do { System.out.println("Hello World3"); }while (true);
死循环有什么应用场景呢?
最典型的是可以用死循环来做服务器程序, 比如百度的服务器程序就是一直在执行的,你随时都可以通过浏览器去访问百度。如果哪一天百度的服务器停止了运行,有就意味着所有的人都永不了百度提供的服务了。
对于这样的应用我们目前了解一下就可以了。对于目前来说我们只要知道代码格式该怎么写,能达到什么效果就行。
3.7 循环嵌套
各位同学,接下来我们学习一种在实际工作中很常用的循环形式——循环嵌套。
所谓循环嵌套,就是一个循环中又包含另一个循环(就是同学们常说的,套娃_),下面我们通过案例代码演示一下。
循环嵌套执行流程:外部循环每循环一次,内部循环会全部执行完一轮。
i=0时; i<3为true; 进入循环 //j的取值从0到5,执行一轮,打印5次"我爱你" for(int j = 1; j <= 5; j++) { System.out.println("我爱你:" + i); } 内层循环执行完之后,执行外层的i++; i的值1 i=1时:i<3为true; 进入循环 //j的取值从0到5,又执行一轮,打印5次"我爱你" for(int j = 1; j <= 5; j++) { System.out.println("我爱你:" + i); } 内层循环执行完之后,执行外层的i++; i的值2 i=2时:i<3为true; 进入循环 //j的取值从0到5,再执行一轮,打印5次"我爱你" for(int j = 1; j <= 5; j++) { System.out.println("我爱你:" + i); } 内层循环执行完之后,执行外层的i++; i的值3 i=3时:i<3为false; 外层循环结束
理解问循环嵌套的执行流程之后,我们再写一个案例来巩固一下
需求:在控制台使用 * 打印出4行5列的矩形 **** **** **** ****
//1)先写一个循环用来在一行中打印5个"*" for (int j = 1; j <= 5; j++) { System.out.print("*"); // 不换行 } System.out.println(); //换行 System.out.println("-----------------"); //2)再将第一步的代码套一层循环,执行4次,就可以打印4行 for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 5; j++) { System.out.print("*"); // 不换行 } System.out.println(); //换行 }
总结一下,对于嵌套循环重点理解这句话:外部循环每循环一次,内部循环会全部执行完一轮。
3.9 跳转语句 break 、continue
前面我们学习了循环结构,在中间我们还接触了死循环的一些形式,那么我想要在循环过程中提前跳出循环怎么做呢?
这里就需要用到跳转语句,需要用到break和continue两个关键字。我们先来认识一下这两个关键字的作用
- break作用:跳出并结束当前所在循环的执行
- continue作用:结束本次循环,进入下一次循环
案例1:演示break的使用,提前终止循环的执行
// 1、break:跳出并结束当前所在循环的执行。 // 场景:假如你又有老婆了,你犯错了,你老婆罚你说:5句我爱你 // 说到第三句的时候心软了,让你别再说了。 for (int i = 1; i <= 5; i++) { System.out.println("我爱你:" + i); if(i == 3){ // 说明已经说完了第三句了,心软了。 break; // 跳出并结束当前所在循环的执行。 } }
案例2:演示continue的使用,结束循环中的一次,继续下一次循环
// 2、continue:跳出当前循环的当次执行,直接进入循环的下一次执行。 // 场景: 假如你有老婆,你犯错了,你老婆罚你洗碗5天。 // 第三天的时候,你表现很好,第三天不用洗碗,但是不解恨,第四天还是要继续的。 for (int i = 1; i <= 5; i++) { if(i == 3) { // 已经到了第三天,第三天不用洗的。 continue; } System.out.println("洗碗:" + i); }
需要注意的是break和continue不是任何地方都可以使用的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S1NWDe9m-1689742908668)(assets/1661146324812.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EaCki4Hv-1689742908670)(assets/1661146405314.png)]
3.9 循环结构总结
到这里关于循环结构的所有内容就都已经学习完了,我们再把几种循环结构在什么场景下使用,再总结一下。
1. 什么是流程控制 答:流程控制是用来控制程序的执行顺序的 2. 分支结构if和switch,如何选择? 答:if分支:一般用于对一个范围进行判断 switch分支:对一个一个值进行匹配 3. for循环和while循环、do-while如何循环 答:知道循环次数用for、不知道循环次数用while 想要先执行,再判断,用do-while
四、递归
递归(recursion)所谓递归方法就是直接或间接调用自身的方法。
要终止一个递归方法,问题最后必须达到一个终止条件。当问题达到终止条件时就会将结果返回给调用者。然后调用者进行计算并将结果返回给它自己的调用者。这个过程持续进行,直到结果传回给原始的调用者为止。
示例:阶乘 输入一个非负整数,求出此数的阶乘。
import java.util.Scanner; public class App01{ public static void main(String[] args){ Scanner inp=new Scanner(System.in); System.out.print("请输入一个非负整数:"); int n=inp.nextInt(); System.out.print(n+"!="+factor(n)); } //此为定义的一个方法,后面会讲,主要是以此来理解递归调用算法 public static long factor(int n){ if(n==0) return 1; else return n*factor(n-1); //自己调用自己 } }
五、练习:生成随机数
各位同学,接下来我们再学习一个新的知识——生成随机数。
生成随机数其实在很多场景下都很实用,比如,在课堂上可以写一个随机点名器点同学起来回答问题;再比如公司年会可以随机抽奖等。
5.1 如何产生一个随机数
生成随机数的功能,其实 Java已经给我们提供了,在JDK中提供了一个类叫做Random,我们只需要调用Random这个类提供的功能就可以了。
// 目标:掌握使用Random生成随机数的步骤。 // 1、导包。import java.util.Random; (idea会自动完成) import java.util.Random; public class RandomDemo1 { public static void main(String[] args) { // 2、创建一个Random对象,用于生成随机数。 Random r = new Random(); // 3、调用Random提供的功能:nextInt得到随机数。 for (int i = 1; i <= 20; i++) { int data = r.nextInt(10); // 0 - 9 System.out.println(data); } } }
5.2 猜数字小游戏
各位同学,接下来我们通过一个案例把前面的流程控制、跳转语句、随机数综合运用一下;
如果能把这个案例写出来,说明你对今天的知识点掌握得挺好了。
需求: 随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中 结束游戏 分析: 1.先随机生成一个1-100之间的数据。 谁可以帮你生成随机数啊? 是不是要用到Random? 2.定义一个死循环让用户可以一直猜测。 用户猜的数据从哪里来啊? 是不是要用到Scanner? 3.在死循环里,每次让用户录入的数据和随机数进行比较 如果比随机数大:提示猜大了 如果比随机数小:提示猜小了 如果和随机数相同:提示恭喜你猜中了
import java.util.Random; import java.util.Scanner; public class RandomTest2 { public static void main(String[] args) { // 1、随机产生一个1-100之间的数据,做为中奖号码。 Random r = new Random(); int luckNumber = r.nextInt(100) + 1; // 2、定义一个死循环,让用户不断的猜测数据 Scanner sc = new Scanner(System.in); while (true) { // 提示用户猜测 System.out.println("请您输入您猜测的数据:"); int guessNumber = sc.nextInt(); // 3、判断用户猜测的数字与幸运号码的大小情况 if(guessNumber > luckNumber){ System.out.println("您猜测的数字过大~~"); }else if(guessNumber < luckNumber){ System.out.println("您猜测的数字过小~~"); }else { System.out.println("恭喜您,猜测成功了,可以买单了~~"); break; // 结束死循环 } } } }