大家好,我是IT小白105,今天让各位了解一下多重循环结构的用法和例子
什么是二重循环呢
一个循环体又包含另一个循环结构
while(循环条件1) {
//循环操作1
while(循环条件2) {
//循环操作2
}
}
for(循环条件1) {
//循环操作1
for(循环条件2) {
//循环操作2
}
}
do {
//循环操作1
do {
//循环操作2
}while(循环条件1);
}while(循环条件2);
while(循环条件1) {
//循环操作1
for(循环条件2) {
//循环操作2
}
}
例如:有三个班,每个班有4个学生。在控制台输入每个学生的成绩。求出每个班的平均分。
分析:
固定次数可用for的多重循环
外层控制班级数目。内层控制每个班的学生
因为求的是每个班的平均分不是3个班总共平均分,所以总分变量要在内循环外面。外循环里面
代码:
```java
public class JAVA2 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int ban=3;
for (int i=0;i<3;i++){
double sum=0;
System.out.println("请输入第"+(i+1)+"个班的学生的成绩");
for (int j=0;j<4;j++){
System.out.print("请输入第"+(j+1)+"个学员的成绩");
double score=input.nextDouble();
sum=sum+score;
}
System.out.println("第"+(i+1)+"个班级的学员平均分"+sum/4);
}
}
}
执行结果;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210121102429922.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjcwOTIyMg==,size_16,color_FFFFFF,t_70)
例如:打印各种图形 直角三角形 矩形 9*9乘法表都可用for的多重循环具体代码如下
例如;控制台输入三角形高度。打印相应三角形。每行为1,3,5,7。。。。。。
分析:外层循环控制行数。
内层循环控制数目。
最后在内层循环外补空格
代码:
```java
import java.util.Scanner;
public class JAVA4 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入直角三角形的高");
int gao=input.nextInt();
for (int i=1;i<=gao;i++){
for (int j=1;j<=2*i-1;j++){
System.out.print("*");
}
System.out.print("\n");
}
}
}
执行结果:
乘法口诀表:
外层循环控制行数。i<=9
内层循环控制多少个式子j<=i
第 i 行的 j 个式子结果为j*i
代码:
public class JAVA7 {
public static void main(String[] args) {
for (int i=1;i<=9;i++){
for (int j=1;j<=i;j++){
int sum=j*i;
System.out.print(j+"*"+i+"="+sum+"\t");
}
System.out.print("\n");
}
}
}
结果:
冒泡排序
数字升序
比较相邻两数
小的换到前面
每轮结束后最大数换到最后
数组,数组.length = 5
这5个数字如何存放
1.外层循环,循环变量 i控制比较多少轮。
2.内层循环,循环变量 j控制每轮比较多少次 每次循环后的 i 则不用再继续比较
3.交换数据
升序口诀
N 个数字来排队
两两相比小靠前
外层循环 N-1
内层循环 N-1-I
降序只要
做到两两相比大靠前。
例如:控制台输入
5个学生成绩,
按降序打印输出!
分析:首先for循环录入数组
外层循环控制循环多少轮 i
内层控制多少次 j
考虑数组最初为[0],所以 i<数组长度-1.
考虑循环比较后的 i 不需要再继续比较 j<数组长度-1-i。
j交换数据
循环打印按降序输出
代码
public class JAVA8 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入5名学员成绩");
int[] scores = new int[5];
for (int i = 0; i < scores.length; i++) {
int score = input.nextInt();
scores[i] = score;
}
for (int i = 0; i < scores.length - 1; i++) {
for (int j = 0; j < scores.length - 1 - i; j++) {
if (scores[j] < scores[j + 1]) {
int temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;
}
}
}
for (int i = 0; i < scores.length; i++) {
System.out.println(scores[i]);
}
}
}
执行结果为:
scores[j] < scores[j + 1]如果看不懂的话可以通过举例 scores[j]=15 j=1
score[j+1]=20 j+1=2
也就等于
scores[j]=15
score[j+1]=20
如果15 <20就把15和20调换位置
15 20换成
20 15就相当于降序
而15已经比较过了就不用再比较了所以下次循环要减掉15也就是剪掉 i.这就是 j<数组长度-1-i。
如果为升序则把
scores[j] < scores[j + 1]
换为
scores[j] >scores[j + 1]
运行结果
多重循环中break的用法,可以跳出内循环执行外循环。
例如:有五家店。用户每次进去店购买东西,店家会问是否离开如果离开则显示结账。不离开则显示买了件衣服,每家店最多买三件衣服,五家店买完 求出一共买了多少衣服
分析:外层循环控制店 i<5
内层循环控制买的次数 j<3 .如果输入的为y,则利用break跳出内循环,否则就是买了件衣服。因为求的是总共所以总数变量放在多重循环外。
代码:
import java.util.Scanner;
public class java11 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int count=0;
for (int i=0;i<5;i++){
System.out.println("欢迎光临第"+(i+1)+"家店");
for (int j=0;j<3;j++){
System.out.print("要离开吗y/n");
String str=input.next();
if (str.equals("y")){
break;
}else {
System.out.println("买了1件衣服");
count++;
}
}
System.out.println("离店结账");
}
System.out.print("一共买了"+count);
}
}
结果如下:
多重循环中利用continue可以跳出当前正在进行的循环,执行下一次循环。
例如三个人买三件商品要求控制台输入价格如果每件商品价格大于300.
则可以享受八折优惠,统计出每个人有几件可以享受优惠的商品。
分析:
外层循环控制人数 i<3
内层循环控制商品件数 j<3
因为要算出每个人的件数所以,每个人的件数变量 count应该放在外层循环内,内层循环外,如果放到最外面,则求出的是三人一共买的商品。
如果买的商品价格小于等于300,利用continue跳出当前循环 如果大于300则count++
代码如下:
import java.util.Scanner;
public class java10 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
for (int i=0;i<3;i++){
int count=0;
System.out.println("请输入"+(i+1)+"个人所购的三件商品价格");
for (int j=0;j<3;j++){
double price=input.nextDouble();
if (price<=300){
continue;
}
count++;
}
System.out.println("第"+(i+1)+"个人共有"+count+"件商品享有8折!");
}
}
}
结果如下:
明天更新
吃货联盟!!!!