Java学习笔记2.6.2 数组 - 二维数组
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习笔记2.6.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 以上是关于Java学习笔记2.6.2 数组 - 二维数组的主要内容,如果未能解决你的问题,请参考以下文章
\\qquad
(
a
+
b
)
2
=
a
2
+
2
a
b
+
b
2
(a+b)^2=a^2+2ab+b^2
(a+b)