Java语言里提供了支持多维数组的语法。如果说可以把一维数组当成几何中的线性图形, 那么二维数组就相当于是一个表格。
二维数组、三位数组以至于n维数组在本质上是一致的,因此,本文主要讨论二维数组,多维数组可以以二维数组作类比。
对于二维数组的理解,我们可以看成是一维数组 array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。
一、多维数组的声明和初始化
1.1 多维数组的声明方式
语法格式:
数据类型[][] 数组名;// 首选的方法
或
数据类型[] 数组名[];// 效果相同,但不是首选方法
或
数据类型 数组名[][];// 效果相同,但不是首选方法
1.2 多维数组的静态初始化、
语法格式:
数据类型[][] 数组名 = {{值1,值2,···,值i},···,{值1,值2,···,值j}};
或
数据类型[][] 数组名 = new 数据类型[][]{{值1,值2,···,值i},···,{值1,值2,···,值j}};
1.3 多维数组的动态初始化
语法格式1:
数据类型[][] 数组名 = new 数据类型[数组元素个数1][数组元素个数2];
例如int[][] arr = new int[3][2];
定义了名称为arr的二维数组。二维数组中有3个一维数组 每一个一维数组中有2个元素 一维数组的名称分别为arr[0], arr[1], arr[2] 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
语法格式2:
数据类型[][] 数组名 = new 数据类型[数组元素个数1][];
例如int[][] arr = new int[3][];
二维数组中有3个一维数组。 每个一维数组都是默认初始化值null (注意:区别于格式1) 可以对这个三个一维数组分别进行初始化 arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2];
二、多维数组元素的引用
与一维数组类似,通过索引(下标)的方式实现。
语法格式:
数组名[数组元素下标1][数组元素下标2];
三、多维数组获取数组长度
数组名.length;
表示二维数组有多少个一维数组。
数组名[元素下标].length;
表示数组元素第 元素下标 个一维数组有多少个元素。
四、多维数组的遍历
使用双层循环实现。
五、 多维数组元素的默认初始化值
规定:二维数组分为外层数组的元素,内层数组的元素。例如int[][] arr = new int[4][3];
的外层元素有arr[0]
,arr[1]
等;内层元素有arr[0][0]
,arr[1][2]
等
针对于初始化方式一:比如:int[][] arr = new int[4][3];
- 外层元素的初始化值为:地址值
- 内层元素的初始化值为:与一维数组初始化情况相同
针对于初始化方式二:比如:int[][] arr = new int[4][];
- 外层元素的初始化值为:null
- 内层元素的初始化值为:不能调用,否则报错。
六、多维数组的内存解析
例如:
int[][] arr = new int[4][];//①
arr[1] = new int[]{1,2,3};//②
arr[2] = new int[4];//③
arr[2][1] = 30;//④
①时内存状态:
②时内存状态:
③时内存状态:
④时内存状态:
七、多维数组使用案例
7.1 二维数组基本操作
//二维数组的声明 三种形式
//声明int类型的二维数组
int[][] intArray;
//声明float类型的二维数组
float floatArray[][];
//声明double类型的二维数组
double[] doubleArray[];
//创建一个三行三列的int类型的数组
intArray=new int[3][3];
System.out.println("intArray数组的第3行第2列的元素为:"+intArray[2][1]);
//为第2行第3个元素赋值为9
intArray[1][2]=9;
System.out.println("intArray数组第2行第3列的元素为:"+intArray[1][2]);
//声明数组的同时进行创建
char[][] ch=new char[3][5];
//创建float类型的数组时,只指定行数
floatArray=new float[3][];
//System.out.println(floatArray[0][0]);
//每行相当于一个一维数组,需要创建
floatArray[0]=new float[3];//第一行有三列
floatArray[1]=new float[4];//第二行有四列
floatArray[2]=new float[5];//第三行有5列
System.out.println(floatArray[0][0]);
//System.out.println(floatArray[0][3]);//数组下标越界 //二维数组的初始化
int[][] num={{1,2,3},{4,5,6},{7,8,9}};
System.out.println("num数组第1行第2列的元素为:"+num[0][1]);
System.out.println("num数组的行数为:"+num.length);
System.out.println("num数组的列数为:"+num[0].length);
int[][] num1={{78,98},{65,75,63},{98}};
System.out.println("num1数组的第1行的列数为:"+num1[0].length);
//循环输出二维数组的内容
for(int i=0;i<num1.length;i++){
for(int j=0;j<num1[i].length;j++){
System.out.print(num1[i][j]+" ");
}
System.out.println();
}
7.2 打印杨辉三角
使用二维数组打印一个 10 行杨辉三角。
杨辉三角:
- 第一行有 1 个元素, 第 n 行有 n 个元素
- 每一行的第一个元素和最后一个元素都是 1
- 从第三行开始, 对于非第一个元素和最后一个元素的元素。存在
yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
关系
int[][] yanghui = new int[10][];
int i, j;
for (i = 0; i < yanghui.length; i++) {
yanghui[i] = new int[i + 1];
for (j = 0; j < yanghui[i].length; j++) {
if (j == 0 || j == yanghui[i].length - 1) {
yanghui[i][j] = 1;
} else {
yanghui[i][j] = yanghui[i - 1][j - 1] + yanghui[i - 1][j];
}
}
}
for (i = 0; i < yanghui.length; i++) {
for (j = 0; j < yanghui[i].length; j++) {
System.out.print(yanghui[i][j] + " ");
}
System.out.println(" ");
}