一、二维数组的定义
1、第一种方式
数据类型[ ][ ] 数组名 = new 数据类型[m][n] ;
m:代表当前二维数组中有多少个一维数组
n:代表每一个一维数组中的长度
如:int [ ][ ] arr = new int [3][2];
或:数据类型[ ] 数组名[ ] = new 数据类型[m][n];
(int [ ] arr[ ] = new int [3] [2];)
或:数据类型 数组名[ ][ ] = new 数据类型[m][n] ;
(int arr[ ][ ] = new int [3] [2];)
2、第二种方式
数据类型[][] 数组名 = new 数据类型[m][] ;
m:一维数组的个数,其中每一个一维数组长度动态给定
如:int[ ][ ] arr = new int[3][ ] ;
arr[0] = new int[2] ;
arr[1] = new int[3] ;
arr[2] = new int[2] ;
3、第三种方式(静态初始化)
数据类型[ ][ ] 数组名称 = {{元素1,元素2,···},{....}} ;
如:int[ ][ ] arr = {{1,2,3},{4,5},{6}} ;
此时定义了一个二维数组arr,该二维数组包含了三个一维数组,arr[0]包含3个元素,arr[1]包含2个元素,arr[2]包含1个元素,若输出System.out.println(arr[2][1]);编译能通过但运行时会抛出异常ArrayIndexOutOfBoundsException(数组角标越界异常),因为此时arr[2]只包含1个元素。
二、二维数组的遍历
以一个具体的代码为例:
public class ArrayTest {
public static void main(String[] args) {
//定义一个二维数组,静态初始化
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
//通过嵌套循环,外层循环遍历二维数组的长度(即一维数组的个数),内层循环遍历每个一维数组的元素个数
for(int x = 0 ; x < arr.length ; x ++) {
for(int y = 0 ; y < arr[x].length; y++) {
System.out.print(arr[x][y]+" ");
}
}
System.out.println("----------------------------");
//最终版代码:定义一个遍历二维数组的功能
printArray2(arr);
}
/**
* 两个明确:
* 1)明确返回值类型:void
* 2)明确参数类型:int[][] arr
*/
public static void printArray2(int[][] arr) {
for(int x = 0 ; x < arr.length ; x ++) {
for(int y = 0 ; y < arr[x].length ; y++) {
System.err.print(arr[x][y]+" ");
}
}
}
}
二维数组的遍历首先遍历二维数组的长度(arr.length),也就是一维数组的个数,其次遍历每个一维数组的每一个元素(arr[i].length),在这里一定要搞清楚。