6

多重循环控制_mb6318b1fa06863的技术博客_51CTO博客

 1 year ago
source link: https://blog.51cto.com/u_15784725/6047144
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1) 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层循环。 【建议一般使用两层,最多不要超过 3 层, 否则,代码的可读性很差】

2) 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内 层循环,才可结束外层的当次循环,开始下一次的循环

例:判断输出

多重循环控制_break

public class Test14
{
public static void main(String[] args)
{
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
System.out.println("i="+i+"j="+j);
}
}
}
}

2. 多重循环例题 134

统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。

统计三个班及格人数,每个班有 5 名同学。

//化繁为简
//(1) 先计算一个班 , 5 个学生的成绩和平均分 , 使用 for
//1.1 创建 Scanner 对象然后,接收用户输入
//1.2 得到该班级的平均分 , 定义一个 doubel sum 把该班级 5 个学生的成绩累积

//(2) 统计 3 个班(每个班 5 个学生) 平均分
//(3) 所有班级的平均分

//统计三个班及格人数,每个班有 5 名同学。
//(4) 统计三个班及格人数
//4.1 定义变量 int passNum = 0; 当有一个学生成绩>=60, passNum++
//4.2 如果 >= 60 passNum++
//(5) 可以优化[效率,可读性, 结构]
//创建 Scanner 对象
import java.util.Scanner;
public class Test14
{
public static void main(String[] args)
{
Scanner input = new Scanner (System.in);
double allsum = 0;//记录所有班的总分
int passNum=0;//及格人数统计
for(int i =1;i<=3;i++)//每个班级
{
double sum = 0;//记录每个班总分
for(int j=1;j<=5;j++)//每个学生
{
System.out.println("请输入第"+i+"个班级第"+j+"个学生成绩");
double score = input.nextDouble();
System.out.println("学生成绩为"+score);
sum=sum+score;
//如果 >= 60 passNum++
if(score>=60)
{
passNum++;
}
}
System.out.println("请输入第"+i+"个班级总分为:"+sum+"平均成绩为"+(sum/5));//输出一个班的平均成绩
allsum = allsum+sum;
}
System.out.println("总分"+allsum+"所有班平均分为:"+(allsum/15));//总平均分
System.out.println("总及格人数:"+passNum);//总及格人数
}
}

例2 打印出九九乘法表 135

[课后题]

//打印出九九乘法表[课后题]
public class Test14
{
public static void main(String[] args)
{
int i=1;
for(i=1;i<=9;i++)
{
int j=1;
for(j=1;j<=i;j++)
{
System.out.print(j+"*"+i+"="+(i*j)+"\t");//print是不换行输出
}
System.out.println("");//总体换行
}
}
}

例3 打印金字塔 136

多重循环控制_System_02
public class Test14
{
public static void main(String[] args)
{
for(int i=1;i<=5;i++)//表示层数
{
for(int k=1;k<=5-i;k++)//打印空格
{
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++)//打印星星
{
System.out.print("*");
}
System.out.println("");
}
}
}

例4 打印空心金字塔

多重循环控制_i++_03
public class Test14
{
public static void main(String[] args)
{
int totallevel=10;
for(int i=1;i<=totallevel;i++)//表示层数
{
for(int k=1;k<=totallevel-i;k++)//打印空格
{
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++)//打印星星
{
//当前位置第一个(j==1)是*,最后一个(j==2*i-1)也是*,最后一行(i==5) 全部输出*
if(j==1||j==2*i-1||i==totallevel)
{
System.out.print("*");
}
else
{
System.out.print(" ");//其他情况输出空格
}
}
System.out.println("");
}
}
}

5. 跳转语句 break

5.1 跳转语句break 138

break 语句用于终止某个语句块的执行,一般使用在 switch 或者循环[for , while , do-while]中

5.1 Math.random()生成随机数[0-1) 137-138

随机生成 1-100 的一个数,直到生成了 97 这个数,看看你一共用了几次?

public class Test15
{
public static void main(String[] args)
{
int ret=0;
int count = 0;
for(;;)
{
ret = (int)(Math.random()*100)+1;
count++;
if(ret==97)
{
break;
}
}
System.out.println("count="+count);
System.out.println("ret="+ret);
}
}

6. break小例题 139

多重循环控制_i++_04

//break小例题
public class Test15
{
public static void main(String[] args)
{
for(int i=0;i<10;i++)
{
if(i==3)
{
break;
}
System.out.println("i="+i);
}
}
}

7. break细节

多重循环控制_break_05
//break细节关于标签的使用
public class Test15
{
public static void main(String[] args)
{
abc1:
for(int j=0;j<4;j++)
{
abc2:
for(int i=0;i<20;i++)
{
if(i==2)
{
break abc1;
}
System.out.println("i="+i);
}
}
}
}

8. 比较两个字符串是否相等 equals

//比较字符串是否相等 equals
import java.util.Scanner;
public class Test15
{
public static void main(String[] args)
{
String name = "中国";
System.out.println(name.equals("中国"));//T
System.out.println("中国".equals(name));//T,两种写法都对
}
}

9. break练习

例1 141

1-100 以内的数求和,求出 当和 第一次大于 20 的当前数 【for + break】

public class Test15
{
public static void main(String[] args)
{
int sum=0;
for(int i=1;i<=100;i++)
{
sum+=i;
if(sum>20)
{
System.out.println("和>20的时候,当前数i="+i);
break;
}
}
}
}

例2 142

实现登录验证,有 3 次机会,如果用户名为"丁真" ,密码"666"提示登录成功,否则提示还有几次机会,请使用 for+break 完成

import java.util.Scanner;
public class Test15
{
public static void main(String[] args)
{
// 思路分析
// 1. 创建 Scanner 对象接收用户输入
// 2. 定义 String name ; String passwd; 保存用户名和密码
// 3. 最多循环 3 次[登录 3 次],如果 满足条件就提前退出
// 4. 定义一般变量 int chance 记录还有几次登录机会
Scanner myScanner = new Scanner(System.in);
String name = "";
String passwd = "";
int chance = 3;//登录一次少一次
for(int i=1;i<=3;i++)
{
System.out.println("请输入名字");
name = myScanner.next();
System.out.println("请输入密码");
passwd = myScanner.next();
if("丁真".equals(name) && "666".equals(passwd))//比较字符串是否相等
{
System.out.println("恭喜你,登陆成功");
break;
}
else//登录次数减少
{
chance--;
System.out.println("你还有"+chance+"次机会");
}
}
}
}

10. 跳转控制语句continue 144

1) continue 语句用于结束本次循环,继续执行下一次循环。

2) continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层环 , 这个和前面的标签的 使用的规则一样

//跳转控制语句continue 145
public class Test15
{
public static void main(String[] args)
{
int i=1;
while(i<=4)
{
i++;
if(i==2)
{
continue;
}
System.out.println("i="+i);
}
}
}

11. 自我提升 打印菱形

多重循环控制_break_06
import java.util.Scanner;
public class Test15
{
public static void main(String[] args)
{
System.out.println("请输入想要的层数");
Scanner myScanner = new Scanner(System.in);
int n = myScanner.nextInt();//自我控制层数
//先打印上半部分,上5层
for(int i =1;i<=n;i++)//层数
{
//打印空格
for(int j=1;j<=n-i;j++)
{
System.out.print(" ");
}
//打印*
for(int k=1;k<=2*i-1;k++)
{
if(k==1 || k==2*i-1)//变成空心
{
System.out.print("*");
}
else
{
System.out.print(" ");
}
}
System.out.println();
}
//在打印下半部分
for(int a=1;a<=n-1;a++)//层数
{
//打印空格
for(int b=1;b<=a;b++)
{
System.out.print(" ");
}
//打印*
for(int c=1;c<=2(n-a)-1;c++)//此规律2(5-a)-1,细细琢磨
{
if(c==1||c==2*(n-a)-1)//变成空心
{
System.out.print("*");
}
else
{
System.out.print(" ");
}
}
System.out.println();
}
}
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK