开启掘金成长之旅!这是我参与「掘金日新计划 · 12月更文挑战」的第10天
循环结构
for循环——控制一段代码反复执行很多次
格式:
for(初始化语句;循环条件;迭代语句) {
循环体语句(重复执行的代码);
}
示例
//输出三次HelloWorld
for(int i = 0;i < 3;i++) {
System.out.println("Hello World");
}
案例 求和
需求:求1-5之间的数据和,并把求和结果在控制台输出。
分析:<br/>
1.定义for循环使其能够依次访问到:1、2、3、4、5。
for (int i = 1; i <= 5; i++){
}
2.在循环外定义一个整数变量sum用来累加这些数据。
int sum = 0;
for (int i = 1;i<= 5; i++){
sum += i;
}
3.循环结束后,输出求和变量即是结果。
//需求:计算1-5的和
// 2、定义一个整数变量用于累加数据求和
int sum = 0;
// 1、定义一个for循环找到 1 2 3 4 5
for (int i=1;i<=5 ;i++) {
//i=1234 5
//3、把循环的数据累加给sum变量
/**
等价于: sum=sum + i
i == 1 sum = 0 + 1
i == 2 sum = 1 + 2
i == 3 sum = 3 + 3
i == 4 sum = 6 + 4
i == 5 sum = 10 + 5
*/
sum += i;
}
System.out.println("1-5的和是:"+sum);
案例 求奇数和
需求:求1-10之间的奇数和,并把求和结果在控制台输出。
方式一:
1.定义for循环使其能够依次访问到:1、2、3、4、5...10。
2.在for循环中,通过if筛选出奇数
for (int i = 1; i <= 10; i++) {
if(i % 2 == 1) {
//i = 1 3 5 7...
}
}
3.在循环外定义一个整数变量sum用来累加这些数据。
//需求:求1-10的奇数和
//3、定义一个求和的变量 累加奇数和
int sum = 0;
//1、定义一个循环找到1 2 3...10
for(int i = 1; i <= 10; i++) {
// i 1 2 3 4 5 6 7 8 9 10
//2、筛选出奇数
if(i % 2 == 1){
//i = 1 3 5 7 9
sum += i;
}
}
//4、输出求和变量即可
System.out.println("1-10的奇数和是:" + sum);
方法二:
1、定义for循环使其能够依次访问到:1、3、5、7、9。
for(int o = 1;i <= 10;i+=2) {
}
2、在循环外定义一个整数变量sum用来累加这些数据。
//2、定义一个求和的变量累加奇数和
int sum1 = 0;
//1、定义循环找到 1 3 5 7 9
for (int i = 1; i <= 10; i+=2) {
//i = 1 3 5 7 9
sum1 += i;
}
//3、输出求和变量即可
System.out.println("1-10的奇数和是:" + sum1);
案例 水仙花数
需求:在控制台输出所有的“水仙花数”,水仙花数必须满足如下2个要求:
1.水仙花数是一个三位数
2. 水仙花数的个位、十位、百位的数字立方和等于原数
分析:
1.定义一个for循环从“100一直到999”
2.每次访问到数据后,提取该数据的:个位、十位、百位数字。
3.使用if判断:个位、十位、百位的数字立方和是否等于原数,等于则输出该数据。
// 需求:找出水仙花数并输出
// 1、定义一个for循环找出全部三位数
for (int i= 100;i <= 999;i++) {
//2、判断这个三位数是否满足要求
//i = 157
//个位
int ge = 1 % 10;
//十位
int shi = i / 10 % 10;
// 百位
int bai = i / 100;
if((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
System.out.print(i+"\t");
}
}
如果还要知道水仙花数的个数怎么办?
在循环外定义一个变量count用于记录水仙花数。
每输出水仙花数时,让count++。
//需求:找出水仙花数并输出
//在循环外定义一个变量用于记录水仙花的个数
int count = 0;
//1、定义一个for循环找出全部三位数
for(int i =100; i<= 999;i++) {
//2、判断这个三位数是否满足要求
// i= 157
//个位
int ge = i % 10;
// 十位
int shi = i / 10 % 10;
//百位
int bai = i / 100;
if( (ge*ge*ge + shi*shi*shi + bai*bai*bai) == i) {
System.out.print(i+"\t");
count++;
}
}
System.out.println();//换行!
System.out.println("水仙花个数是:" + count);
while循环
初始化语句;
while(循环条件) {
循环体语句(重复执行的代码);
迭代语句;
}
示例
int i = 0;
while(i < 3) {
System.out.println("Hello World");
i++;
}
for循环和while循环的使用规范: 知道循环几次用for;不知道循环几次用while
案例 珠穆朗玛峰(世界最高峰8848.86米)
需求:
世界最高山峰是珠穆朗玛峰(8848.86米=8848860毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,折叠多少次,可以折成珠穆朗玛峰的高度。
思路:
这种不清楚要循环多少次的情况可以选择用while实现。
分析步骤
1.定义变量存储珠穆朗玛峰的高度、纸张的高度。
double peakHeight = 8848860; // 山峰高度
double paperThickness = 0.1; // 纸张厚度
2.使用while循环,循环条件是(纸张厚度<山峰高度),内部控制纸张折叠,每折叠一次,纸张厚度为原来两倍,循环外定义计数变量,每折叠依次让该变量+1
int count = 0;
while (paperThickness < peakHeight){
paperThickness *= 2;
count++;
}
// 需求:珠穆朗峰高度是8848860 纸张厚度 0.1 折叠纸张直到不低于珠穆朗峰位置,求折叠几次
// 1、定义变量记录山峰的高度 纸张的厚度
double peakHeight = 8848860;
double paperThickness = 0.1;
// 3、定义一个变量用于记录纸张折叠的次数
int count = 0;
// 2、定义一个while循环控制纸张进行折叠
while (paperThickness < peakHeight){
// 让纸张的厚度多一倍
paperThickness *= 2;
count++;
}
System.out.println("折叠的次数:" + count);
System.out.println("纸张的最终厚度:" + paperThickness);
do-while循环——先执行再判断循环条件
初始化语句;
do {
循环体语句;
迭代语句;
} while (循环条件);
do-while循环的特点:一定会先执行一次循环体。
示例
// 目标:学会使用dowhile循环,并理解其执行流程
int i = 0;
do {
System.out.println("Hello World");
i++;
}while (i < 3);
三种循环的区别
- for循环 和 while循环(先判断后执行)
- do...while (第一次先执行后判断)
for 和 while 的区别:
- for循环和while循环的执行流程是一模一样的。
- 如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
- for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以继续使用。
死循环——一直循环的执行下去,如果没有干预不会停止下来
写法
for(;;) {
System.out.println("Hello World");
}
// 经典做法
while(true) {
System.out.println("Hello World");
}
do {
System.out.println("Hello World");
} while (true);
// 目标:学会定义死循环。
for ( ; ; ) {
System.out.println("Hello World~~~~");
}
-------------------------------------------------------------------------
// 经典写法
while (true) {
System.out.println("我是快乐的死循环~~~~");
}
-------------------------------------------------------------------------
do{
System.out.println("我是快乐的死循环~~~~");
}while (true);
案例 密码验证
需求:系统密码是520,请用户不断的输入密码验证,验证不对输出
密码错误,验证成功输出欢迎进入系统,并停止程序。
分析:
1.使用while死循环,让用户不断输入数据
2.与密码比对:验证不成功输出密码错误、
3.验证成功输出欢迎进入系统,并使用break结束当前循环的执行。
// 1、定义正确的密码
int okPassword = 520;
// 2、定义一个死循环让用户不断的输入密码认证
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请您输入正确的密码:");
int password = sc.nextInt();
// 3、使用if判断密码是否正确
if(password == okPassword){
System.out.println("登录成功了~~~");
break; // 可以理解结束当前所在循环的执行的
}else {
System.out.println("密码错误!");
}
}
循环嵌套
特点:外部循环每循环一次,内部循环全部执行完一次。
// 目标:理解嵌套循环的执行流程
// 场景:假如你有老婆,然后你犯错了,你老婆罚你说5天,每天3句我爱你。
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
System.out.println("我爱你");
}
System.out.println("--------------");
}
案例
/**
*****
*****
*****
*****
*/
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
System.out.print("*");
}
System.out.println(); // 换行
}
跳转关键字
跳转控制语句介绍
-
break : 跳出并结束当前所在循环的执行。
-
continue: 用于跳出当前循环的当次执行,进入下一次循环。
// 目标:理解break 和 continue的作用。
// 场景:假如你又有老婆了,然后你犯错了,你老婆罚你做5天家务,每天都是洗碗。
// 但是洗碗到第三天后心软了 原谅你了不用洗了
for (int i = 0; i < 5; i++) {
System.out.println("快乐的洗碗~~~~");
if(i == 2) {
break; // 跳出并结束当前循环的执行~~
}
}
// continue 跳出当前循环的当次执行,进入循环的下一次
// 场景:假如你又有老婆了,然后你犯错了,你老婆罚你做5天家务,
// 每天都是洗碗。但是洗碗到第三天后心软了 原谅你了不用洗了 但是依然不解恨 继续洗第4天 5天
for (int i = 1; i <= 5 ; i++) {
if(i == 3){
continue; // 立即跳出当次执行,进入循环的下一次!
}
System.out.println("洗碗:" + i);
}
注意:
break : 只能用于结束所在循环, 或者结束所在switch分支的执行。
continue : 只能在循环中进行使用。
案例技术:随机数Random类
Random的使用
Random随机数技术——用于在程序中获取随机数的技术。
// 目标:学会使用Java提供的随机数类Random
// 1、导包
// 2、创建随机数对象
Random r = new Random();
// 3、调用nextInt功能(方法)可以返回一个整型的随机数给你
for (int i = 0; i < 20; i++) {
int data = r.nextInt(10); // 0 - 9 不包含10的(包前不包后)
System.out.println(data);
}
Random生成随机数的特点
- nextInt(n)功能只能生成:0 – (n-1)之间的随机数。
Random生成区间随机数的技巧:减加法
例如:要生成 1 – 10之间的随机数,程序怎么实现?
// 1 - 10 ==> -1 ==> (0 - 9) + 1
int data = r.nextInt(10) + 1;
System.out.println(data);
// 3 - 17 ==> -3 ==> (0 - 14) + 3
int data1 = r.nextInt(15) + 3;
System.out.println(data1);
总结: 1.Random随机数类生成需要几步,具体是什么样的?
- 导包:import java.util.Random;
- Random r = new Random();
- int number = r.nextInt(10);
2.Random随机数如何生成 65 – 91之间的随机数?
- 65 – 91 => (0 - 26)+ 65
- int number = r.nextInt(27) + 65;
案例:猜数字游戏
需求:
- 随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。
分析:
1.随机生成一个1-100之间的数据
2.使用死循环让用户不断提示用户猜测,猜大提示过大,猜小提示过小,猜中结束游戏。
// 1、随机一个幸运号码 1- 100之间 (0 - 99) + 1
Random r = new Random();
int luckNumber = r.nextInt(100) + 1;
// 2、使用一个死循环让用户不断的去猜测,并给出提示
Scanner sc = new Scanner(System.in);
while (true) {
// 让用户输入数据猜测
System.out.println("请您输入猜测的数据(1-100):");
int guessNumber = sc.nextInt();
// 3、判断这个猜测的号码与幸运号码的大小情况
if(guessNumber > luckNumber){
System.out.println("您猜测的数据过大~");
}else if(guessNumber < luckNumber){
System.out.println("您猜测的数据过小");
}else {
System.out.println("恭喜您,猜中了,可以去买单了~~~");
break; // 直接跳出并结束当前死循环!!
}
}