9.1 概述
int[][] arr; // arr是一个二维数组,可以看成是int[]一维数组的一个数组
二维数组也可以看成是一个二维表,行和列组成的二维表,只不过这个二维表中的每一行的列数可能不同。但是每一个单元格中的元素的数据类型是一致的,例如,都是 int、String 等类型。
9.2 二维数组的语法
9.2.1 动态初始化1
语法:
数据类型[][] 数组名 = new 数据类型[m][n]
// 二维数组中元素的访问
数据类型 元素名 = 二维数组名[行下标][列下标];
// 二维数组中元素的赋值
二维数组名[行下标][列下标] = 值;
内存图:
示例:
/**
* 二维数组的动态初始化
*
* @author maxiaoke.com
* @version 1.0
*/
public class ArrayTest6 {
public static void main(String[] args) {
// 定义了一个名称为arr的二维数组
// arr中有3个一维数组,每个一维数组中有2个元素。每个一维数组的名称是:arr[0]、arr[1]、arr[2]、
int[][] arr = new int[3][2];
// 二维数组元素的访问
System.out.println("二维数组的元素的访问 = " + arr[0][0]);
System.out.println("二维数组的元素的访问 = " + arr[0][1]);
System.out.println("二维数组的元素的访问 = " + arr[1][0]);
System.out.println("二维数组的元素的访问 = " + arr[1][1]);
System.out.println("二维数组的元素的访问 = " + arr[2][0]);
System.out.println("二维数组的元素的访问 = " + arr[2][1]);
// 二维数组中的元素赋值
arr[0][0] = 1;
arr[0][1] = 2;
arr[1][0] = 3;
arr[1][1] = 4;
arr[2][0] = 5;
arr[2][1] = 6;
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[0][0]);
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[0][1]);
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[1][0]);
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[1][1]);
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[2][0]);
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[2][1]);
}
}
9.2.2 动态初始化2
数据类型[][] 数组名 = new 数据类型[m][];
数组名[行下标] = new 数据类型[n];
示例:
/**
* 二维数组的动态初始化
*
* @author maxiaoke.com
* @version 1.0
*/
public class ArrayTest7 {
public static void main(String[] args) {
// 动态创建一个二维数组
int[][] arr = new int[3][];
arr[0] = new int[1];
arr[1] = new int[2];
arr[2] = new int[3];
// 二维数组的元素的访问
System.out.println("二维数组的元素的访问 = " + arr[0][0]);
System.out.println("二维数组的元素的访问 = " + arr[1][0]);
System.out.println("二维数组的元素的访问 = " + arr[1][1]);
System.out.println("二维数组的元素的访问 = " + arr[2][0]);
System.out.println("二维数组的元素的访问 = " + arr[2][1]);
System.out.println("二维数组的元素的访问 = " + arr[2][2]);
// 二维数组中元素的赋值
arr[0][0] = 1;
arr[1][0] = 2;
arr[1][1] = 3;
arr[2][0] = 4;
arr[2][1] = 5;
arr[2][2] = 6;
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[0][0]);
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[1][0]);
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[1][1]);
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[2][0]);
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[2][1]);
System.out.println("赋值之后的二维数组的元素的访问 = " + arr[2][2]);
}
}
9.2.3 静态初始化
语法:
数据类型[][] 数组名 = new int[][]{{元素1,元素2,...},{元素1,元素2,...},{元素1,元素2,...},...}
数据类型[][] 数组名 = {{元素1,元素2,...},{元素1,元素2,...},{元素1,元素2,...},...}
数据类型[][] 数组名 ;
数组名 = new int[][]{{元素1,元素2,...},{元素1,元素2,...},{元素1,元素2,...},...}
示例:
/**
* 二维数组的静态初始化
*
* @author maxiaoke.com
* @version 1.0
*/
public class ArrayTest8 {
public static void main(String[] args) {
// 二维数组的静态初始化
int[][] arr = new int[][]{{1,2}, {2, 3}, {4, 5, 6}};
// 二维数组元素的访问
System.out.println("二维数组的元素的访问 = " + arr[0][0]);
System.out.println("二维数组的元素的访问 = " + arr[0][1]);
System.out.println("二维数组的元素的访问 = " + arr[1][0]);
System.out.println("二维数组的元素的访问 = " + arr[1][1]);
System.out.println("二维数组的元素的访问 = " + arr[2][0]);
System.out.println("二维数组的元素的访问 = " + arr[2][1]);
System.out.println("二维数组的元素的访问 = " + arr[2][2]);
}
}
9.3 二维数组的名称以及表达方式
二维数组的长度/行数:
二维数组名.length
二维数组的某一行:
// 行下标的范围是[0,二维数组名.length-1]
二维数组名[行下标]
二维数组的某一行的列数:
// 二维数组的每一行是一个一维数组
二维数组名[行下标].length
二维数组的某一个元素:
二维数组名[行下标][列下标]
9.4 二维数组的遍历
for(int i=0; i<二维数组名.length; i++){
for(int j=0; j<二维数组名[i].length; j++){
System.out.print(二维数组名[i][j]);
}
System.out.println();
}
示例:
/**
* 二维数组的遍历
*
* @author maxiaoke.com
* @version 1.0
*/
public class ArrayTest9 {
public static void main(String[] args) {
int[][] arr = new int[][]{{1, 2}, {2, 3}, {4, 5, 6}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
}