初识Java(五)(多重循环)(自己学习整理的资料)

目录

 

一.复习回顾

二.二重循环

三.多重循环

(二)超市购物系统


 

一.复习回顾

  1. Java中的三大循环:for     while     do - while
  • for:对已知循环次数。

  • while:在循环次数不确定的情况下优先选择。

  • do - while:循环至少要执行一次的场景。

复习题

  • 在一个班级里有若干名学生,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。
import java.util.Scanner;

public class lian {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        //求总的年龄
        int sum = 0;
        for (int i = 1;i <= num;i++){
            int age = input.nextInt();
            sum+= age;
        }
        //平均年龄 = 总年龄 / 总人数
        double avg = sum * 1.0 / num;
       String result = String.format("%.2f", avg);
       System.out.println(result);
    }
}

二.二重循环

  • 概念:一个循环体内又包含另一个完整的循环结构.
  • 语法:

for(循环条件1){

//循环操作1

for(循环条件2){

//循环操作2

}

}

  • 案例:
  • 使用二重循环输出如下图形:

*****

*****

*****

分析:外层循环控制打印图形的行数,内层循环控制打印图形的列数。

public class lian {
    public static void main(String[] args) {
    //写一个外层循环控制行数
        for (int i = 1;i <= 3;i++) {
            //写一个内层循环控制*的个数
            for (int j = 1; j <= 5; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

练习题

  • (一)编程序输出如下图形 

11111

22222

33333

44444

public class lian {
    public static void main(String[] args) {
    for (int i = 1;i <= 4;i++){
        //用内存来控制数字的个数
        for (int j = 1;j <= 5;j++){
            System.out.println(i);
        }
        System.out.println();
    }
    }
}
  • (二) 输出一个三角形的图形

*

**

***

****

*****

public class lian {
    public static void main(String[] args) {
    for (int i = 1;i <= 5;i++){
        //控制*的个数
        for (int j = 1;j <= i;j++){
            System.out.print("*");
        }
        System.out.println();
    }
    }
}

 

  • (三)打印等腰三角形

     *

   ***

  *****

 *******

*********

每行输出的“*”号的个数与行数的关系

行数123···i···
个数135···2*i-1···

 

每行输出的空格数与行数的关系
行数123···i···
个数432···n-i···
public class lian {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            //控制空格的循环
            for (int j = 1; j <= 5 - i; j++) {
                System.out.print(" ");
            }
            //控制*号的循环
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
  •  (四)打印数字直角三角形

0

12

345

6789

public class lian {
    public static void main(String[] args) {
     int num = 0;
     for (int i = 1;i <= 4; i++){
         for (int j = 1;j <= i;j++){
                System.out.print(num);
                num++;
            }
            System.out.println();
        }
    }
}
  •  (五)编写九九乘法表。
lic class lian {
    public static void main(String[] args) {
     for (int i = 1;i <= 9; i++){
         for (int j = 1;j <= i;j++){
                System.out.print(i + "*" + j + "=" +(i * j) + "\t");
            }
            System.out.println();
        }
    }

ps:二重循环打印图形的万能解法

  1. 先观察图形的行数,行数就是外层循环结束的条件。

  2. 内层循环结束条件如何去构建,也就是找到内存循环变量和 外层循环变量的关系。

  3. 内层循环结束后,不要忘记换行。

  4. 如果一行中符号类型有多个,则需要在外层循环中包含多个循环,分别控制不同类型的符号打印,难点就是如何找出每一个内层循环变量和外层循环变量之间的关系。

三.多重循环

  • 概念:多重循环就是外层循环内部有一个中层循环,中层循环内有一个内层循环。它的执行机制和二重循环相似,只不过循环的次数更多。

ps:循环次数越少,电脑运算速度越快,写代码算法越优良。

案例

  • 3文钱可以买1只公鸡,2文钱可以买1只母鸡,1文钱可以买3只小鸡,要用100文钱买100只鸡(每种鸡必须买1只),公鸡、母鸡、小鸡各有多少只?
  •  需要同时满足两个条件:
  1. 公鸡+母鸡+小鸡=100只
  2. 买公鸡的钱+买母鸡的钱+买小鸡的钱=100文
public class lian {
    public static void main(String[] args) {
        //写一个外层循环控制公鸡的数量
        for (int i = 1; i <= 33; i++) {
            //第二层循环控制母鸡的数量
            for (int j = 1; j <= 50; j++) {
                //第三层循环控制小鸡的数量
                for (int k = 1; k <= 98; k++) {
                    if (i + j + k == 100 && 3 * i + 2 * j + k / 3.0 == 100) {
                        System.out.println(i + "\t" + j + "\t" + k);
                    }
                }
            }
        }
    }
}

练习

  • (一)有一个三位数,个位数字比百位数字大,而百位数字又比十位数字大,并且个位数字之和等于各位数字相乘之积,求此三位数。
public class lian {
    public static void main(String[] args) {
        for (int ge = 3; ge <= 9;ge++) {
            for (int bai = 2; bai <= 8; bai++) {
                for (int shi = 1; shi <= 7; shi++) {
                    if (ge + shi + bai == ge * shi * bai) {
                        System.out.println(bai * 100 + shi * 10 + ge);
                        break;
                    }
                }
            }
        }
    }
}
  • (二)超市购物系统

  • 超市为了能自动算出每位顾客应付的货款,自动算出超市一天的营业额,自动统计一天购物的人数,需要一个简易的超市收费系统。

  • ps:超市一天来多少位顾客是不确定的,可以用一个结束标志来检查是否一天结束了。每位顾客换购的商品种类也不一样,用另一个结束标志来表示。

import java.util.Scanner;

public class lian {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        //超市购物系统
        boolean flag = true;//证明超市是否开门
        int money,sumone = 0, sum = 0,num = 0;//sumone:单人购物的总金额,sum:超市的营业额, num:今日顾客人数
        while (flag){
            //超市开门并且来客人
            sumone = 0;
            do {
                money = input.nextInt();
                if (money == -1){//超市歇业中
                    flag = false;
                    break;
                }
                sumone+= money;
            }while (money != 0);//购物金额非0,证明顾客买东西了
            if (sumone != 0){
            num++;
                System.out.println("您的购物金额为:" + sumone + "元");
            }
            sumone+=sumone;
        }
        System.out.println("今天一共有" + num +"位顾客");
        System.out.println("今日总销售额为:" + sum + "元");
    }
}

ps:设置标记位:如果为0,证明单人购物结束,如果为-1,证明今日超市营业完成后已经歇业。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值