【Java全栈学习笔记-U1-day07】二重循环+二维数组

【Java全栈学习笔记-U1-day07】二重循环+二维数组

声明:Java全栈学习笔记是为整理当初学习Java时的学习笔记,以复习为目的而制作,仅提供大家交流学习,请勿用作他用

day07 二重循环+二维数组


目标

  1. 二重循环(掌握)

  2. 跳转语句在二重循环的应用

  3. 二维数组(扩展:理解)

一、 二重循环

1.1 什么是二重循环

一个循环体内又包含别一个完整的循环的结构。

1.2 构成二重循环

任意两个循环嵌套即可构成二重循环

for(...){  //外层循环
    for(...){   //内层循环
        循环体……
    }
}

注意

外层循环一次,内层循环一轮

1.3 二重循环的应用

二重循环一般用于解决**矩阵图形(表格)**问题。

for(...){  //外层循环  控制行
    for(...){   //内层循环  控制列
        循环体
    }
    System.out.println();	//换行
}

示例一:理解二重循环

/**
 * @Author: 开心就好9905
 * @Date: 2024/2/27 12:43
 */
public class demo1 {
    public static void main(String[] args) {
        //示例一:理解二重循环
        for (int i = 1; i < 3; i++) {   //外层循环
            for (int j = 1; j < 4; j++) {   //内层循环
                System.out.print("小林 ");
            }
            System.out.println();
        }
    }
}

示例二:求3个班级的各四名学员的平均成绩

import java.util.Scanner;

/**
 * @Author: 开心就好9905
 * @Date: 2024/2/27 14:33
 */
public class demo2 {
    public static void main(String[] args) {
        //示例:求3个班级的各4名学院的平均成绩
        Scanner input = new Scanner(System.in);
        for (int i = 1; i < 4; i++) {   //外层循环控制班级数目
            System.out.println("第" + i + "个班级");
            //循环输入四名学员的成绩
            int sum = 0;    //累加器
            for (int j = 1; j < 5; j++) {   //内层循环控制学生的数目
                System.out.println("请输入第" + j + "个学员的成绩");
                int grade = input.nextInt();    //接收输入成绩
                sum = sum + grade;
            }
            int avg = sum / 4;
            System.out.println("平均分是:" + avg);
        }
    }
}

示例三:输出以*号代表的矩形

/**
 * @Author: 开心就好9905
 * @Date: 2024/2/27 14:50
 */
public class demo3 {
    public static void main(String[] args) {
        //示例:输出以*号为代表的矩形
        for (int i = 1; i < 6; i++) {   //外层控制行
            for (int j = 1; j < 6; j++) {   //内层控制列
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

示例四:输出以*号代表的三角形

输出以*号代表的三角形

/**
 * @Author: 开心就好9905
 * @Date: 2024/2/27 14:52
 */
public class demo4 {
    public static void main(String[] args) {
        for (int i = 1; i < 6; i++) {   //行
            //控制列
            for (int j = 1; j <= 2 * i - 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println();
        //输出乘法表----练习
        for (int i = 1; i < 10; i++) {  //行
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + (i * j) + "\t");
            }
            System.out.println();
        }
    }
}

示例五:输出以*号代表的等腰三角形

输出以*号代表的等腰三角形

/**
 * @Author: 开心就好9905
 * @Date: 2024/2/27 16:11
 */
public class demo5 {
    public static void main(String[] args) {
        /*输出以*号代表的以下图形等腰 三角形*/
        int rows = 5;  //总行数
        for (int i = 1; i <= rows; i++) {   //行
            //控制空格
            for (int j = 1; j <= rows - i ; j++) {
                System.out.print(" ");
            }
            //控制*
            for (int k = 1; k <= 2 * i - 1 ; k++) {
                System.out.print("*");
            }
            System.out.println("");
        }
    }
}

二、跳转语句在二重循环中的应用

注意:跳转语句用在二重循环中,只作用于当前循环,不作用于外层循环

示例:

/**
 * @Author: 开心就好9905
 * @Date: 2024/2/27 16:50
 */
public class demo6 {
    public static void main(String[] args) {
        //跳转语句在二重循环中
        for (int i = 1; i <= 2; i++) {  //外层循环
            for (int j = 1; j <= 3; j++) {  //内层循环
                System.out.print("小林");
                //break;  //退出循环
                continue;   //退出本次循环,继续下一次
            }
            System.out.println();
        }
    }
}

三、 二维数组(扩展)

3.1 数组分类

一维数组、二维数组、多维数组

3.2 二维数组(解决矩阵存储(表)问题)

/**
 * @Author: 开心就好9905
 * @Date: 2024/2/27 17:00
 */
public class demo7 {
    public static void main(String[] args) {
        //1.声明二维数组
        //数据类型 [][] 数组名称
        //2.分配内存空间
        //数组名称 = new 数据类型[行数][列数]
        //String [][]twoary = new String[3][3];
        //4.数组赋值
        //数组名称[行数][列数] = 值
        /*twoary[0][0]="杨过";
        twoary[0][1]="小龙女";
        twoary[0][2]="平哥";

        twoary[1][0]="宋吉";
        twoary[1][1]="丁文星";
        twoary[1][2]="马蓉";

        twoary[2][0]="张三";
        twoary[2][1]="老王";
        twoary[2][2]="麻子";*/
        //7.定义二维数组并且初始化
        String [][]twoary=new String[][]{
                {"杨过", "小龙女", "平哥"},
                {"宋吉", "丁文星", "马蓉"},
                {"张三", "老王", "麻子"}
        };

        //5.获取元素
        System.out.println(twoary[0][0]);

        //6.显示二维数组中所有内容
        for (int i = 0; i < twoary.length ; i++) {  //行数
            for (int j = 0; j < twoary[i].length ; j++) {  //列
                System.out.print(twoary[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

数组总结:

一维数组:解决线性问题

二维数组:解决一个面的问题

多维数组:解决立体图形问题

作业

作业一

请输入行数,显示对应行数的倒三角形:

以5行例:每行*号为:9 7 5 3 1

效果如下:

请输入行数:5

输入行数产生倒三角形

import java.util.Scanner;

/**
 * @Author: 开心就好9905
 * @Date: 2024/4/6 2:34
 * @Description:NULL
 */
public class Triangle_Upside_Down {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入行数:");
        int rows = scanner.nextInt();   //输入行数

        for (int i = 1; i <= rows; i++) {   //行
            for (int j = 1; j <= 2 * (rows - i) + 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

作业二

作业二

import java.util.Scanner;

/**
 * @Author: 开心就好9905
 * @Date: 2024/4/6 2:49
 * @Description:NULL
 */
public class Three_Classes {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入第" + (i + 1) + "个班级的成绩");
            double sum = 0;
            for (int j = 0; j < 4; j++) {
                System.out.print("第" + (j + 1) + "个学员的成绩:");
                double grade = scanner.nextDouble();
                sum = sum + grade;
            }
            double avg = sum / 4;
            System.out.println("第" + (i + 1) + "个班级参赛学员的平均分是:" + avg);
            System.out.println();
        }
    }
}

作业三

鸡兔同笼是我国古代著名的趣题之一。大约在1500之前,《孙子算经》中记载了这样一道题目:今有稚兔同笼,上有三十五头,下有九十四足,问鸡兔各几只?试编写程序解决这个问题。

提示:

定义变量chookNum,rabbitNum分别表示鸡的数量, 兔子的数量,二者有如下两个关系。

chookNum + rabbitNum = 35;

2 * chookNum + 4*rabbitNum = 94;

鸡的数量chookNum的范围是0<=chookNum<=35,利用循环结构实现。

package Homework;

/**
 * @Author: 开心就好9905
 * @Date: 2023/2/14 16:21
 * @Description:鸡兔同笼是我国古代著名的趣题之一。大约在1500之前,《孙子算经》中记载了这样一道题目:
 * 今有稚兔同笼,上有三十五头,下有九十四足,问鸡兔各几只?试编写程序解决这个问题。利用循环结构实现。
 */
public class Chicken_Rabbit {
    public static void main(String[] args) {

        /*
        //方法一:利用方程关系式推算出结果,但没有循环结构,
        //但不符合题目要求,pass,写着玩一下
        Scanner input = new Scanner(System.in);

        int chickenNum; //鸡的数量
        int rabbitNum;  //兔的数量
        //int heads = input.nextInt();  //头的数量
        //int legs = input.nextInt();   //腿的数量
        int heads = 35; //头的数量
        int legs = 94;  //腿的数量
        //chickenNum + rabbitNum = heads;
        //2 * chickenNum + 4 * rabbitNum = legs;
        chickenNum = 2 * heads - legs / 2;
        rabbitNum = legs / 2 - heads;
        System.out.println("鸡有" + chickenNum + "只,兔有" + rabbitNum +"只。");
         */

        /*
        //方法二:一次循环加判断
        //Scanner input = new Scanner(System.in);
        int chickenNum; //鸡的数量
        int rabbitNum;  //兔的数量
        //int heads = input.nextInt();  //头的数量
        //int legs = input.nextInt();   //腿的数量
        int heads = 35; //头的数量
        int legs = 94;  //腿的数量
        for (chickenNum = 1; chickenNum <= heads; chickenNum++){
            rabbitNum = heads - chickenNum;
            if (chickenNum + rabbitNum == heads && chickenNum * 2 + rabbitNum * 4 == legs){
                System.out.println("鸡有" + chickenNum + "只,兔有" + rabbitNum +"只。");
            }
        }
         */

        //方法二:穷举
        //Scanner input = new Scanner(System.in);
        int chickenNum; //鸡的数量
        int rabbitNum;  //兔的数量
        //int heads = input.nextInt();  //头的数量
        //int legs = input.nextInt();   //腿的数量
        int heads = 35; //头的数量
        int legs = 94;  //腿的数量
        for (chickenNum = 1; chickenNum <= heads; chickenNum++){
            for (rabbitNum = 1; rabbitNum <= heads; rabbitNum++){
                if (chickenNum + rabbitNum == heads && chickenNum * 2 + rabbitNum * 4 == legs){
                    System.out.println("鸡有" + chickenNum + "只,兔有" + rabbitNum +"只。");
                }
            }
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值