在Java中,二维数组被看作数组的数组,即二维数组是一个特殊的一维数组,二维数组的每个元素都是一个一维数组。
元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][一维数组的长度];
int[][]arr=newint[3][2];
以上这种情况代表有3个一维数组,且每个一维数组有2个元素。
元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][];
int[][]arr=newint[3][];
以上这种情况代表有3个一维数组,但每个一维数组的元素个数不确定,且每个一维数组的元素个数可以不一样。
元素的数据类型[][] 数组的名字 = {{元素1,元素2,…},{元素1,元素2,…},…};
int[][]arr={{1,2,3},{4,5},{6,7,8,9}};
以上这种情况代表有3个一维数组,第一个一维数组中有3个元素,第二个一维数组中有2个元素,第三个一维数组中有4个元素,每个一维数组的元素个数可以不一样。
声明二维数组有下列两种格式:
数组的元素类型 数组名[][];
数组的元素类型 [][] 数组名;
例如:
charcat[][];char[][]cat;
二维数组的初始化同一维数组一样,有两种方式:动态初始化和静态初始化。
1)先声明再静态初始化
元素的数据类型[][]二维数组名;二维数组名=new元素的数据类型[][]{{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};
2)声明的同时静态初始化
元素的数据类型[][]二维数组名=new元素的数据类型[][]{{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};
注意:右边“new 元素的数据类型[][]”中“[][]”中不能写数字,因为行数和列数由{}中的元素个数决定。
3)声明的同时静态初始化的简化写法
元素的数据类型[][]二维数组名={{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};
例如:
publicclassMain{publicstaticvoidmain(String[]args){int[][]arr={{1,2,3},{4,5},{6}};//定义数组System.out.println(arr[0][0]);//1System.out.println(arr[1][0]);//4System.out.println(arr[2][0]);//6System.out.println(arr[0][1]);//2System.out.println(arr[1][1]);//5System.out.println(arr[2][1]);//越界}}
动态初始化创建可以不用声明里面一维数组的长度,因此,它每个一维数组长度可以不一样,所以,就有了下面两种初始化方式。
1)动态初始化一:规则二维表
程序员指定数组的长度,后期再赋值,一开始系统会先给定元素默认初始值,规则二维表也就意味着每一行的列数是相同的,其一般格式如下,首先确定行数和列数:
元素的数据类型[][]二维数组名=new元素的数据类型[m][n];
其中m表示这个二维数组有多少个一维数组,或者说二维表一共有几行;n表示每个一维数组的元素有多少个,或者说每行有几个单元格。
此时创建完数组,行数列数确定,而且元素也都有默认值,再为元素赋新值:
二维数组名[行下标][列下标]=值;
例如:
publicclassMain{publicstaticvoidmain(String[]args){int[][]arr=newint[3][2];/*定义一个二维数组arr这个二维数组有3个一维数组的元素每个一维数组有2个元素*/System.out.println(arr);//输出二维数组名称System.out.println(arr[0]);//输出二维数组的第一个元素一维数组的名称System.out.println(arr[0][0]);//输出二维数组的元素}}
2)动态初始化二:不规则二维表
不规则二维表也就意味着每一行的列数可能不一样,其一般格式如下,首先确定总行数:
元素的数据类型[][]二维数组名=new元素的数据类型[总行数][];
此时只是确定了总行数,每一行里面现在是null,然后再确定每一行的列数,创建每一行的一维数组:
二维数组名[行下标]=new元素的数据类型[该行的总列数];
此时通过new的行的元素就有默认值,没有通过new的行还是null,最后为元素赋值:
二维数组名[行下标][列下标]=值;
注意:不规则二维表,声明后,初始化内部一维数组时不能简写。
//不规则二维表定义二维数组int[][]arr=newint[3][];//3行,未知的列//初始化二维数组内的元素值arr[0]=newint[]{1};//此处不能简写为arr[0]={1}arr[1]=newint[]{2,3};arr[2]=newint[]{4,5,6};
二维数组的遍历和一维数组一样,区别就是,首先要在外循环,遍历每个一维数组,其一般格式如下:
for(inti=0;i<二维数组名.length;i++){for(intj=0;j<二维数组名[i].length;j++){System.out.print(二维数组名[i][j]);}System.out.println();}