Java循环的详解
一. for循环
含义:条件成立就重复执行
好处:减少了代码的冗余(减少重复性的代码)
语法结构:
for(表达式1;表达式2;表达式3){
...代码块...
}
理解:
表达式1:初始化变量
表达式2:判断条件
表达式3:更新变量
执行流程:
1.初始化变量
2.判断条件:判断条件的结果必须是boolean
2.1 true - 执行代码块,并更新变量,重复第2个步骤
2.2 false- 跳出整个循环语句
for循环变形记:
循环中声明变量的作用域只能在循环内
再循环中i++和++i没有区别
int i = 1;
for(;i<=5;){
System.out.println("变形记");
//i++;
++i;
}
System.out.println(i);
理解案例1:输出1-9的数字
for(int i = 1;i<=9;i++){
System.out.println(i);
}
理解案例2:输出0-9的数字
for(int i = 0;i<10;i++){
System.out.println(i);
}
理解案例3:输出1~9数字中的奇数
//解决方案1
for(int i = 1;i<10;i+=2){
System.out.println(i);
}
//解决方案2
for(int i = 1;i<10;i++){
if(i%2!=0){
System.out.println(i);
}
}
理解案例4:输出9~1的数字
for(int i = 9;i>0;i--){
System.out.println(i);
}
总结 - 理解案例:i可以从1开始也可以从0开始,更新变量可以递增也可以递减
死循环:(应该避免的)
for(;;){
System.out.println("用良心做教育");
}
伪死循环:(应该避免的)
for(int i = 0;i>=0;i++){
System.out.println("用良心做教育");
}
案例1:循环录入5次int类型的数字,输出总和
Scanner scan = new Scanner(System.in);
int sum = 0;//总和
for(int i = 1;i<=5;i++){
System.out.println("请输入第" + i + "个数字:");
int num = scan.nextInt();
sum += num;//累加
}
System.out.println("总和为:" + sum);
案例2:循环录入麻生希同学的5门课成绩,计算平均分
Scanner scan = new Scanner(System.in);
double sum = 0;//总成绩
for(int i = 1;i<=5;i++){
System.out.println("请输入第" + i + "门成绩:");
double score = scan.nextDouble();
sum += score;//累加
}
System.out.println("平均分为:" + (sum/5));
案例3:循环录入5次int类型的数字,输出最大值
Scanner scan = new Scanner(System.in);
System.out.println("请输入第1个数字:");
int max = scan.nextInt();//假设第一个输入的数字为最大值
for(int i = 2;i<=5;i++){
System.out.println("请输入第" + i + "个数字:");
int num = scan.nextInt();
if(max < num){
max = num;
}
}
System.out.println("最大值为:" + max);
1.1for循环嵌套for循环嵌套
需求:打印图形
-
* ** *** **** *****
for(int i = 0;i<5;i++){
for(int j = 0;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
*****
****
***
**
*
for(int i = 0;i<5;i++){
for(int j = 5;j>i;j--){
System.out.print("*");
}
System.out.println();
}
*****
****
***
**
*
for(int i = 0;i<5;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 5;j>i;j--){
System.out.print("*");
}
System.out.println();
}
*
***
*****
for(int i = 0;i<3;i++){
for(int k = 2;k>i;k--){
System.out.print(" ");
}
for(int j = 0;j<i*2+1;j++){
System.out.print("*");
}
System.out.println();
}
*
* *
*****
for(int i = 0;i<3;i++){
for(int k = 2;k>i;k--){
System.out.print(" ");
}
for(int j = 0;j<i*2+1;j++){
if(i==0 || i==2 || j==0 || j==i*2){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
*****
***
*
for(int i = 0;i<3;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 5;j>=i*2+1;j--){
System.out.print("*");
}
System.out.println();
}
*****
* *
*
for(int i = 0;i<3;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 5;j>=i*2+1;j--){
if(i==0 || i==2 || j==5 || j==i*2+1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
需求:九九乘法表
第一种方法:
for(int i = 1;i<=9;i++){
for(int j = 1;j<=i;j++){
System.out.print(j + "x" + i + "=" + (i*j) + "\t");
}
System.out.println();
}
运行截图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uDvwDygH-1627044726752)(C:\Users\朱小武\AppData\Roaming\Typora\typora-user-images\image-20210723203127596.png)]
第二种方法:
for(int i = 1;i<=9;i++){
for(int k = 1;k<i;k++){
System.out.print("\t");
}
for(int j = i;j<=9;j++){
System.out.print(i + "x" + j + "=" + (i*j) + "\t");
}
System.out.println();
}
运行截图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5WcNpOXJ-1627044726753)(C:\Users\朱小武\AppData\Roaming\Typora\typora-user-images\image-20210723202915076.png)]
二. while循环
//语法结构:
while(表达式){
...代码块...
}
理解:
表达式的结果必须是boolean
true - 执行代码块
false- 跳出循环
//死循环:
while(true){
System.out.println("死循环");
}
案例:我有个梦想,每月存3000,每年递增1000元,多少个月后存满20万
int money = 3000;
int allMoney = 0;
int month = 0;
while(allMoney < 200000){
allMoney+=money;
month++;
if(month % 12 == 0){
money+=1000;
}
}
System.out.println(month + "个月以后存满20万 " + money);
总结:循环次数不确定2.1
2.1 do-while循环
//语法结构:
do{
...代码块...
}while(表达式);
理解:
表达式的结果必须是boolean
true - 执行代码块
false- 跳出循环执行顺序:
1.先执行一遍代码块
2.判断表达式
2.1 true - 执行代码块,再重复第2个步骤
2.2 false- 跳出循环
//死循环:
do{
System.out.println("死循环");
}while(true);
案例:小明参加学校组织的歌咏比赛,
大赛在即,老师建议:先彩排一次,如果很令人满意,
以后就不用彩排了,否则每天都排,直到现场表现满意为止!
Scanner scan = new Scanner(System.in);
String str;
do{
System.out.println("许川:旋转、跳跃,我闭着眼~~~");
System.out.println("许川:何老师,您满意了吗?");
str = scan.next();
}while(str.equals("不满意"));
总结:循环次数不确定
for vs while vs do-while
语法结构的区别:
for(初始化变量;判断条件;更新变量){}
while(判断条件){}
do{}while(判断条件);
循环共同点:判断条件的结果都是boolean值,true-循环 false-跳出循环
执行顺序的区别:
for:先判断,再执行
while:先判断,再执行
do-while:先执行一遍,再判断
应用场景的区别:
循环次数确定:for
循环次数不确定,先判断,再执行:while
循环次数不确定,先执行一遍,再判断:do-while
> 总结:循环次数不确定
>
>
> for vs while vs do-while
> 语法结构的区别:
> for(初始化变量;判断条件;更新变量){}
> while(判断条件){}
> do{}while(判断条件);
> 循环共同点:判断条件的结果都是boolean值,true-循环 false-跳出循环
> 执行顺序的区别:
> for:先判断,再执行
> while:先判断,再执行
> do-while:先执行一遍,再判断
>
> 应用场景的区别:
> 循环次数确定:for
> 循环次数不确定,先判断,再执行:while
> 循环次数不确定,先执行一遍,再判断:do-while