Java学习笔记2.6.2 数组 - 二维数组

Posted howard2005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习笔记2.6.2 数组 - 二维数组相关的知识,希望对你有一定的参考价值。

文章目录

零、本讲学习目标

  1. 了解二维数组使用场景
  2. 掌握二维数组的基本使用

一、引入多维数组的场景

  • 在程序中可以通过一个数组来保存某个班级学生的考试成绩,试想一下,如果要统计一个学校各个班级学生的考试成绩,又该如何实现呢?

  • 上面这种场景就需要用到多维数组,多维数组可以简单地理解为在数组中嵌套数组。而在程序中,比较常见的多维数组是二维数组。

二、二维数组的定义

(一)指定二维数组行数与列数

int[][] xx = new int[3][4];

  • 上面的代码相当于定义了一个3*4的二维数组,这个二维数组的长度为3,可以将它看成3个int[]类型的一维数组,每个一维数组中的元素又是一个长度为4的一维数组。

(二)指定二维数组行数,不指定列数

int[][] xx = new int[3][];

  • 第二种方式和第一种类似,只是数组中每个元素的长度不确定。

(三)直接使用嵌套大括号“”静态初始化二维数组

int[][] xx = 1, 2, 3, 4, 5, 6, 7, 8, 9;

  • 上面的二维数组中定义了三个元素,这三个元素都是数组,分别为1, 2、3, 4, 5, 6、7, 8, 9 。

三、二维数组的使用

(一)二维数组的遍历

  • 二维数组的遍历要采用双重循环才能实现

任务:遍历二维数组的遍历与访问行列元素

package net.hw.lesson08;

/**
 * 功能:演示二维数组的遍历与行列元素的访问
 * 作者:华卫
 * 日期:2020年4月25日
 */
public class Example811 
    public static void main(String[] args) 
        // 1. 创建3行4列的二维数组
        int[][] a = new int[3][4];

        a[0][0] = 100; // 给第1行第1列元素赋值
        a[1][2] = 150; // 给第2行第3列元素赋值

        System.out.println("a[0][0] = " + a[0][0]);
        System.out.println("a[1][2] = " + a[1][2]);

        int sum = a[0][0] + a[1][2];
        System.out.println("a[0][0] + a[1][2] = " + sum);

        // 2. 创建3行的二维数组(不规则二维数组)
        int[][] b = new int[3][];
        b[0] = new int[2]; // 第1行包含2个元素
        b[1] = new int[3]; // 第2行包含3个元素
        b[2] = new int[4]; // 第3行包含4个元素

        // 遍历二维数组,初始化每个数组元素
        for (int i = 0; i < b.length; i++) 
            for (int j = 0; j < b[i].length; j++) 
                b[i][j] = (i + 1) * (j + 1);
            
        

        // 遍历二维数组,按行列输出数组元素
        System.out.println("数组b全部元素:");
        for (int i = 0; i < b.length; i++) 
            for (int j = 0; j < b[i].length; j++) 
                System.out.print(b[i][j] + "\\t");
            
            System.out.println(); // 换行
        

        // 3. 静态初始化二维数组
        int[][] c = 12, 45, 66, 24, 56, 78, 90, 32, 32, 44, 56, 98;

        System.out.println("数组c全部元素:");
        for (int i = 0; i < c.length; i++) 
            for (int j = 0; j < c[i].length; j++) 
                System.out.print(c[i][j] + " ");
            
            System.out.println(); // 换行
        

        System.out.println("第2行第3列元素:" + c[1][2]);

        System.out.print("第3行的全部元素:");
        for (int j = 0; j < c[2].length; j++) 
            System.out.print(c[2][j] + " ");
        
        System.out.println();

        System.out.println("第3列的全部元素:");
        for (int i = 0; i < c.length; i++) 
            System.out.println(c[i][2]);
        
    


  • 运行程序,查看结果

(二)二维数组的均值与最值

任务:求二维数组所有元素的平均值、最大值和最小值

package net.hw.lesson08;

/**
 * 功能:求二维数组的均值与最值
 * 作者:华卫
 * 日期:2020年4月25日
 */
public class Example812 
    public static void main(String[] args) 
        // 声明部分
        int[][] a = 
                12, 45, 66, 24,
                56, 78, 90, 32,
                32, 44, 56, 98
        ;
        int sum = 0;
        int average;
        int max, min;

        //处理部分
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                sum += a[i][j];
            
        
        average = sum / (a.length * a[0].length);

        max = a[0][0];  // max = Integer.MIN_VALUE;
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                if (max < a[i][j]) 
                    max = a[i][j];
                
            
        

        min = a[0][0]; // min = Integer.MAX_VALUE;
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                if (min > a[i][j]) 
                    min = a[i][j];
                
            
        

        //输出部分
        System.out.println("平均值:" + average);
        System.out.println("最大值:" + max);
        System.out.println("最小值:" + min);
    

  • 运行程序,查看结果

    说明:average = sum / (a.length * a[0].length);针对规则的二维数组没有问题,但是对于不规则的二维数组(数组每一行的元素个数不同)就是错误的处理方式。

思考题:如何计算不规则二维数组的平均值?

  • 创建Example812_
package net.hw.lesson08;

/**
 * 功能:求二维数组均值和最值
 * 作者:华卫
 * 日期:2020年05月11日
 */
public class Example812_ 
    public static void main(String[] args) 
        // 声明部分(静态初始化一个二维数组)
        int[][] a = 
                12, 45,
                56, 78, 90, 32,
                32, 44, 56
        ;
        int sum = 0;
        int average;
        int max, min;
        int count = 0;

        // 处理部分
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                sum += a[i][j];
            
        
        for (int i = 0; i < a.length; i++) 
            count += a[i].length;
        
        average = sum / count;

        max = Integer.MIN_VALUE;
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                if (max < a[i][j]) 
                    max = a[i][j];
                
            
        

        min = Integer.MAX_VALUE;
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                if (min > a[i][j]) 
                    min = a[i][j];
                
            
        

        // 输出部分
        System.out.println("元素个数:" + count);
        System.out.println("平均值:" + average);
        System.out.println("最大值:" + max);
        System.out.println("最小值:" + min);
    

  • 在程序开头定义了一个不规则的二维数组,第一行2个元素,第二行4个元素,第三行3个元素,总共有9个元素。
  • 运行程序,查看结果
  • 19计应3班的赖晓桐给出不同计算方法
  • 刚才我们静态初始化了一个不规则二维数组,现在我们要问能否动态初始化一个同样的二维数组呢?下面我们给出案例演示。
package net.hw.lesson08;

/**
 * 功能:静态和动态初始化不规则二维数组
 * 作者:华卫
 * 日期:2020年05月11日
 */
public class Example813 
    public static void main(String[] args) 
        // 静态初始化不规则二维数组
        int[][] a = 
                12, 45,
                56, 78, 90, 32,
                32, 44, 56
        ;

        // 动态初始化不规则二维数组
        int[][] b = new int[3][];
        b[0] = new int[2];
        b[1] = new int[4];
        b[2] = new int[3];

        b[0][0] = 12;
        b[0][1] = 45;
        b[1][0] = 56;
        b[1][1] = 78;
        b[1][2] = 90;
        b[1][3] = 32;
        b[2][0] = 32;
        b[2][1] = 44;
        b[2][2] = 56;

        // 输出二维数组a
        System.out.println("数组a:");
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                System.out.print(a[i][j] + "\\t");
            
            System.out.println();
        

        System.out.println("数组b:");
        for (int i = 0; i < b.length; i++) 
            for (int j = 0; j < b[i].length; j++) 
                System.out.print(b[i][j] + "\\t");
            
            System.out.println();
        
    

  • 运行程序,查看结果

(三)二维数组与一维数组的相互转换

1、二维数组转换成一维数组

2、一维数组转换成二维数组

四、课后作业

任务:利用二维数组打印杨辉三角形

  • 杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623 ~ 1662)在1654年发现这一规律,所以这个表又叫做帕 斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

\\qquad ( a + b ) 1 = a + b (a+b)^1=a+b (a+b)1=a+b
\\qquad ( a + b ) 2 = a 2 + 2 a b + b 2 (a+b)^2=a^2+2ab+b^2 (a+b)以上是关于Java学习笔记2.6.2 数组 - 二维数组的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记——二维树状数组

java笔记11之二维数组

go语言学习笔记 — 基础 — 高级数据类型 — 数据容器 — 数组:二维数组

Java基础——数组例题&二维数组

指针与一维数组和二维数组以及字符串指针数组的学习笔记

js学习笔记:二维数组 例子:矩形反转: