Java04
循环结构:
循环,即事物周而复始的变化。循环结构,使一部分代码按照次数或一定的条件反复执行的一种代码结构。
循环结构的分类:for循环;while循环;do……while循环
for循环:用于循环次数已知的
格式:
for(初始化语句;判断语句;控制语句) {
//循环体
}
案例:
需求:在控制台输出5次HelloWorld
package cn.hjh.demo;
public class ForDemo {
public static void main(String[] args) {
//需求:在控制台输出5次HelloWorld
//原始做法
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("————————————————————");
//for循环做法
for (int i = 1;i <= 5;i++) {
System.out.println("HelloWorld");
}
}
}
package cn.hjh.demo;
public class ForDemo2 {
public static void main(String[] args) {
//需求:在控制台依次输出1~5和5~1的数字
//1~5
//传统做法
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
System.out.println("——————————");
//通过上述的代码发现:输出语句的次数是固定的,只有内容在改变,对于这种情况,可以采用for循环来解决,从而减少代码量
//for循环做法
for (int i = 1;i <= 5;i++) {
System.out.println(i);
}
System.out.println("——————————————————");
//5~1
//省略传统做法
//for循环
for (int a = 5;a >= 1;a--) {
System.out.println(a);
}
}
}
package cn.hjh.demo;
public class ForDemo3 {
public static void main(String[] args) {
//需求:计算1~5之间的数据之和,并输出总和
//1.定义一个求和变量,初始化值为0。使用变量要记得赋值
int sum = 0;
//2.通过for循环获取1~5之间的数据
for (int i = 1;i <= 5;i++) {
//3.把获取到的数据依次累加给变量sum
sum += i;
}
//4.打印输出结果
System.out.println(sum);
}
}
package cn.hjh.demo;
public class ForDemo4 {
public static void main(String[] args) {
//需求:计算1~100之间的所有偶数和
//1.定义一个求和变量sum,初始化值为0
int sum = 0;
//2.获取1~100的数据
for (int i = 1;i <= 100;i ++) {
//3.判断是否是偶数,是则累加,不是就继续获取
if (i % 2 == 0) {
//到此的i都是偶数
sum += i;
}
}
//4.打印结果
System.out.println("sum:"+sum);
}
}
package cn.hjh.demo;
public class ForDemo5 {
public static void main(String[] args) {
//需求:在控制台输出所有的“水仙花数”
//水仙花数:是指一个三位数(100~1000),其各位数的立方和等于该数本身。如153:1*1*1+5*5*5+3*3*3=1+125+27=153
//1.通过for循环获取所有的三位数
for (int i = 100;i < 1000 && i >= 100;i ++) {
//2.获取每一个三位数的个位,十位,百位。个位:153%10=3;十位:153/10%10=5;百位:153/100%10=1
//a是个位,b是十位,c是百位
int a = i % 10;
int b = i / 10 % 10;
int c = i / 100 % 10;
//方式一
if (a*a*a+b*b*b+c*c*c==i) {
//此处的i是水仙花数
System.out.println(i);
}
//方式二
// int sum = (a*a*a)+(b*b*b)+(c*c*c);
//3.拿个位,十位,百位的立方和一概述本身进行比较,如果相等,则在控制台打印该数
// if (sum==i) {
// System.out.println(i);
// }
}
}
}
package cn.hjh.demo;
public class ForDemo6 {
public static void main(String[] args) {
//需求:统计水仙花数的个数
//1.定义统计变量count,即计数器,初始化为0
int count = 0;
//2.获取所有的三位数,即100~1000之间的数
for (int i = 100;i >= 100 && i < 1000;i ++) {
//3.判断每一个三位数是否为水仙花数,是则count自增1,count++;
//a是个位,b是十位,c是百位
int a = i % 10;
int b = i / 10 % 10;
int c = i / 100 % 10;
int sum = (a*a*a)+(b*b*b)+(c*c*c);
if (sum == i) {
count ++;
//count += 1;
//++ count;
}
}
//4.循环结束,输出计数器count的值
System.out.println("水仙花数的个数是:"+count);
}
}
while循环:用于循环次数不固定的,先判断再循环
格式:
初始化语句;
while(判断条件语句) {
循环体语句;
控制条语句;
}
注意事项:
初始化语句可以省略;控制条件语句可以省略
案例:
需求:在控制台输出5次"HelloWorld"
package cn.hjh.demo;
public class WhileDemo {
public static void main(String[] args) {
//需求:在控制台输出5次"HelloWorld"
//for循环方式
//int i = 1;是初始化语句 i <= 5;是判断条件语句 i++是控制条件语句
for (int i = 1;i <= 5;i++) {
System.out.println("HelloWorld");
}
System.out.println("————————————");
//while循环方式
int i = 1; //初始化语句
while (i < 6) { //括号内为判断条件语句
System.out.println("HelloWorld"); //循环体语句
i ++; //控制条语句
}
}
}
需求:求1~100之间的数据和
package cn.hjh.demo;
public class WhileDemo2 {
public static void main(String[] args) {
//需求:求1~100之间的数据和
//1.定义求和变量sum,初始化为0
int sum = 0;
int i = 1;
//2.使用whlie循环获取1~100之间的数据
while (i <= 100) {
//3.将每一个数据累加到sum变量上
sum += i;
i ++;
}
//4.循环结束,输出sum的值
System.out.println("sum="+sum);
}
}
do……while循环:先执行一次,再判断
格式:
初始化语句;
do {
循环体语句;
控制条件语句;
} while (判断条件语句);
注意事项:
while小括号后的分号不可省略;do……while循环的循环体语句至少执行1遍
案例:
需求:用do……while循环模拟:学习一个知识,至少练习一次
package cn.hjh.demo;
public class DoWhileDemo {
public static void main(String[] args) {
//需求:用do……while循环模拟:学习一个知识,至少练习一次
//1.定义一个int变量的计数器count,即练习的次数,初始化为1
int count = 1;
//2.定义boolean型变量isOk,作为一个标记,表示是否学会,初始化值为false,表示没学会,true表示已经学会
boolean isOk = false;
//3.在do……while循环体中:输出正在练习的次数,判断当练习次数不少于3次时,表示已学会:isOk=true;
do {
System.out.println("已练习"+count+"次");
//判断练习次数
if (count >= 3) {
//执行到此,说明练习次数不少于3次
System.out.println("已经学会该知识点");
isOk =true ; //练习次数不少于3次,表示已学会这个知识点,将isOk的值改为true
}
//每练习一次,次数自增1:count++
count ++;
} while (!isOk); //判断是否学会这个知识点,isOk为true结束循环
}
}
三种循环的区别:
1.格式的不同:
for循环各部分形成一个整体;while和do……while的初始化语句与循环定义分离;while和do……while的初始化语句、控制语句一般都可以省略,而for循环一般不省略
2.初始化语句的不同:
定义位置不同;作用域不同:for循环初始化语句仅限循环内使用;while和do……while的初始化语句可以在循环外使用
3.循环体执行次数的不同:
for和while执行0-n次;do……while执行1-n次,即至少执行一次;
**4.使用场景的不同:**for和while可以互换,但while格式更简洁;仅当循环体至少需要执行一次时使用do……while(不管判断条件是否成立,循环体都会先执行一次)
package cn.hjh.demo;
public class DoWhileDemo2 {
public static void main(String[] args) {
//需求:演示是三种循环的区别
/*
1.格式不同
2.初始化语句不同
3.循环体的执行次数不同
4.使用场景不同
*/
//案例:分别通过三种循环打印1~5之间的数字
//for循环
for (int i = 1;i < 6;i++) {
System.out.println("i="+i);
}
System.out.println("——————————");
//while循环
int a = 1;
while (a < 6) {
System.out.println("a="+a);
a++;
}
System.out.println("————————————");
//do……while循环
int c =1;
do {
System.out.println("c="+c);
c++;
}while (c<6);
}
}
死循环(无线循环):
for循环:
for(;😉 {
//循环体,根据实际需求结束循环(一直循环)
}
while循环:
while(true) {
//循环体,根据实际需求结束循环(一直循环)
}
package cn.hjh.demo;
public class DeadDemo {
public static void main(String[] args) {
//需求:演示死循环
/*
格式一
for(;;) {
//循环体
}
格式二
while(true) {
//循环体
}
*/
// for (;;) {
// System.out.println("你是猪吗");
// }
System.out.println("————————————");
while (true) {
System.out.println("你是笨猪吗");
}
}
}
break和continue:
break用于中断,用于switch语句和循环语句:
在switch语句中,表示结束switch代码块;在循环语句中表示结束循环。
案例:
需求:查找班级编号为3的同学(假设班级中有15位同学)
package cn.hjh.demo;
public class BreakDemo {
public static void main(String[] args) {
//需求:查找班级编号为3的同学(假设班级中有15位同学),找到后循环结束
//1.通过for循环获取每一位痛的编号
for (int i = 1;i <= 15;i++) {
//为了显示break语句的作用,用一个输出语句提示
// System.out.println("我是编号为"+i);
//通过if语句判断编号是否为3
if (i==3) {
System.out.println("找到了编号为"+i+"的学生");
break;
}
}
}
}
continue(继续):用于循环语句,表示结束本次循环,继续下次循环
案例:
需求:一起玩逢7必过小游戏
游戏规则:多人围坐在一起,依次快速说出从1~100的数字,所有含7的或7的倍数的数不能说,否则就失败受到惩罚
package cn.hjh.demo;
public class ContinueDemo {
public static void main(String[] args) {
//模拟逢7必过小游戏
//通过for循环获取1~100之间的数据
for (int i = 1;i < 100;i++) {
//方式一
int a = i % 10;
int b = i / 10 % 10;
int c = i % 7;
if (a == 7 || b == 7 || c == 0) {
System.out.println("*");
continue;
}
//方式二
// if (i % 10 == 7 || i / 10 % 10 == 7 || i % 7 == 0) {
// System.out.println("炸弹");
// continue;
// }
System.out.println(i);
}
}
}
循环嵌套:在一个循环体语句中包含另一个循环语句时,称为循环嵌套
System.out.println(); //输出语句的内容为空的作用:换行
快捷键:for+i+Enter即可直接得以下的代码
// for (int i = 0; i < ; i++) {
//
// }
案例:
需求:按班级获取所有同学(3个班级,每班5个同学)
package cn.hjh.demo;
public class DoubleDemo {
public static void main(String[] args) {
//需求:按照班级获取该班级所有的同学(假设一共有3个班级,每一个班级5名同学)
//原始做法:获取第一个班级的每个同学,但是代码都是重复的
// for (int i = 1;i < 6;i ++) {
// System.out.println("这是1班的"+i+"号同学");
// }
// System.out.println(); //输出语句的内容为空的作用:换行
// for (int i = 1;i < 6;i ++) {
// System.out.println("这是2班的"+i+"号同学");
// }
// System.out.println();
// for (int i = 1;i < 6;i ++) {
// System.out.println("这是3班的"+i+"号同学");
// }
//循环嵌套方式
// 获取每一个班级
// 快捷键:for+i+Enter即可直接得以下的代码
// for (int i = 0; i < ; i++) {
//
// }
for (int a = 1;a <4;a ++) {
for (int b = 1;b < 6;b ++) {
System.out.println("这是"+a+"班"+"的"+b+"号同学");
}
System.out.println(); //每次循环完毕后换行
}
}
}
标号
概念:即循环的名称。给循环定义一个标号,就可以根据需要结束或跳转到指定的循环,常用于多层嵌套循环中
语法:
标号:for() { } //while和do……while举例略
break 标号; //结束指定标号的循环
continue 标号; //跳转到指定标号的循环继续执行
案例:break 标号;
需求:程序猿同学受邀加入A公司,现按班级查找程序猿同学。现有3个班级,每班10同学,假设第2个班级的第5名同学名叫程序猿,找到该同学后则停止查找。
package cn.hjh.demo;
public class BreakDemo2 {
public static void main(String[] args) {
//通过for循环获取每一个班级
c_class:for (int i = 1;i < 4;i ++) {
//在班级循环中再次通过for循环获取每个班级的每个学生
for (int a = 1;a < 11;a ++) {
System.out.println("正在查找第"+ i +"个班级的第"+ a +"名同学");
if (i == 2 && a == 5) {
System.out.println("结束查找");
break c_class; //结束班级查找的循环
}
}
}
System.out.println(); //换行
}
}
循环综合案例:循环嵌套+break+continue+标号
需求:假设有3个班级,每个班级有35个同学,现在要将100个橙子分别发给每位同学,每人只能拿一个。
条件:如果该同学已经有了橙子,则不再发给该同学;如果橙子发完了,则发放活动终止。假设编号为5的倍数的同学都已经有橙子了
package cn.hjh.demo;
public class AllDemo {
public static void main(String[] args) {
//1.定义变量,记录发送的橙子总数
int count = 0; //还没发放橙子
//2.通过for循环,获取到每一个班级
c_class:for (int i = 1; i < 4; i++) {
//3.在班级的循环内,再次通过for循环获取每位同学
for (int s = 1;s < 36;s ++) {
//4.判断该同学是否有橙子
if (s % 5 == 0) {
//说明有橙子,就不发了
continue; //结束本次循环,进行下一次循环
}
//6.如果没有,就给该学生发橙子
System.out.println("正在给第"+i+"班级的第"+s+"同学发放橙子");
//7.每发送一个橙子,count就加一
count ++;
//8.如果橙子发放完了,就结束发放活动
if (count >= 100) {
System.out.println("橙子发完了");
break c_class;
}
}
System.out.println();
}
System.out.println("一共发放了"+count+"个橙子");
}
}
Random类
Random,即随机数。用于产生随机数的类。
使用步骤:
1.导包(使用Random类,需要先导包)
import java.util.Random;
2.创建Random类的对象(使用一个类之前,要先创建它的对象)
Random r = new Random();
3.获取随机数(获取int型随机数)
int num = r.nextInt(100);
package cn.hjh.demo;
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
//需求:获取一个随机数
//1.创建一个Random类的对象(包含:导包,创建对象)
Random r = new Random();
//2.通过r.nextInt(int数字)的方式来获取随机数
// int num = r.nextInt(100); //100的意思是获取随机数的范围是0~10之间的数字,包含0不包含10,就是0~9这10个数字,前闭后开
// System.out.println(num);
//获取100以内的10个随机数
for (int i = 0;i < 10;i ++) {
int num = r.nextInt(100);
System.out.println(num);
}
}
}
案例:猜数字小游戏(技术点:Random类产生随机数+Scanner实现键盘录入+if语句的第三种格式+死循环)
需求:系统产生一个1~100之间的随机数,请猜出这个数是多少
package cn.hjh.demo;
import java.util.Random;
import java.util.Scanner;
public class RandomDemo2 {
public static void main(String[] args) {
// 猜数字游戏
//1.获取一个1~100之间的随机数
//1.1创建Random类对象
Random r = new Random();
//1.2获取指定范围的随机数
//100代表的是0~99,但需求是要1~100,所以要+1
int num = r.nextInt(100)+1;
//2.通过键盘录入获取用户猜的数字
//2.1创建键盘录入对象
Scanner sc = new Scanner(System.in);
//死循环,直到猜对为止
while (true) {
//2.2提醒用户输入数字,并接受
System.out.println("请输入1~100之间的数字");
int c = sc.nextInt();
//对比两个数字
if (num == c) {
System.out.println("恭喜你猜中了");
System.out.println(num);
break;
}else if (c > num) {
System.out.println("你猜的数据"+c+"大了");
}else {
System.out.println("你猜的数据"+c+"小了");
}
}
}
}