在Java中,二维数组被看作数组的数组,即二维数组是一个特殊的一维数组,二维数组的每个元素都是一个一维数组。
1.二维数组的定义
1)格式一:
元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][一维数组的长度];
1 | int [][] arr = new int [ 3 ][ 2 ]; |
以上这种情况代表有3个一维数组,且每个一维数组有2个元素。
2)格式二:
元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][];
1 | int [][] arr = new int [ 3 ][]; |
以上这种情况代表有3个一维数组,但每个一维数组的元素个数不确定,且每个一维数组的元素个数可以不一样。
3)格式三:
元素的数据类型[][] 数组的名字 = {{元素1,元素2,…},{元素1,元素2,…},…};
1 | int [][] arr = {{ 1 , 2 , 3 },{ 4 , 5 },{ 6 , 7 , 8 , 9 }}; |
以上这种情况代表有3个一维数组,第一个一维数组中有3个元素,第二个一维数组中有2个元素,第三个一维数组中有4个元素,每个一维数组的元素个数可以不一样。
2.二维数组的声明
声明二维数组有下列两种格式:
数组的元素类型 数组名[][];
数组的元素类型 [][] 数组名;
例如:
1 2 | char cat[][]; char [][] cat; |
3.二维数组的初始化
二维数组的初始化同一维数组一样,有两种方式:动态初始化和静态初始化。
(1) 静态初始化
1)先声明再静态初始化
1 2 | 元素的数据类型[][] 二维数组名; 二维数组名 = new 元素的数据类型[][]{{元素 1 ,元素 2 ,元素 3 ,…},{第二行的值列表},…,{第n行的值列表}}; |
2)声明的同时静态初始化
1 | 元素的数据类型[][] 二维数组名 = new 元素的数据类型[][]{{元素 1 ,元素 2 ,元素 3 ,…},{第二行的值列表},…,{第n行的值列表}}; |
注意:右边“new 元素的数据类型[][]”中“[][]”中不能写数字,因为行数和列数由{}中的元素个数决定。
3)声明的同时静态初始化的简化写法
1 | 元素的数据类型[][] 二维数组名 = {{元素 1 ,元素 2 ,元素 3 ,…},{第二行的值列表},…,{第n行的值列表}}; |
例如:
1 2 3 4 5 6 7 8 9 10 11 | public class Main { public static void main(String[] args) { int [][] arr = {{ 1 , 2 , 3 },{ 4 , 5 },{ 6 }}; //定义数组 System.out.println(arr[ 0 ][ 0 ]); //1 System.out.println(arr[ 1 ][ 0 ]); //4 System.out.println(arr[ 2 ][ 0 ]); //6 System.out.println(arr[ 0 ][ 1 ]); //2 System.out.println(arr[ 1 ][ 1 ]); //5 System.out.println(arr[ 2 ][ 1 ]); //越界 } } |
(2) 动态初始化
动态初始化创建可以不用声明里面一维数组的长度,因此,它每个一维数组长度可以不一样,所以,就有了下面两种初始化方式。
1)动态初始化一:规则二维表
程序员指定数组的长度,后期再赋值,一开始系统会先给定元素默认初始值,规则二维表也就意味着每一行的列数是相同的,其一般格式如下,首先确定行数和列数:
1 | 元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n]; |
其中m表示这个二维数组有多少个一维数组,或者说二维表一共有几行;n表示每个一维数组的元素有多少个,或者说每行有几个单元格。
此时创建完数组,行数列数确定,而且元素也都有默认值,再为元素赋新值:
1 | 二维数组名[行下标][列下标] = 值; |
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Main { public static void main(String[] args) { int [][] arr = new int [ 3 ][ 2 ]; /* 定义一个二维数组arr 这个二维数组有3个一维数组的元素 每个一维数组有2个元素 */ System.out.println(arr); //输出二维数组名称 System.out.println(arr[ 0 ]); //输出二维数组的第一个元素一维数组的名称 System.out.println(arr[ 0 ][ 0 ]); //输出二维数组的元素 } } |
2)动态初始化二:不规则二维表
不规则二维表也就意味着每一行的列数可能不一样,其一般格式如下,首先确定总行数:
1 | 元素的数据类型[][] 二维数组名 = new 元素的数据类型[总行数][]; |
此时只是确定了总行数,每一行里面现在是null,然后再确定每一行的列数,创建每一行的一维数组:
1 | 二维数组名[行下标] = new 元素的数据类型[该行的总列数]; |
此时通过new的行的元素就有默认值,没有通过new的行还是null,最后为元素赋值:
1 | 二维数组名[行下标][列下标] = 值; |
注意:不规则二维表,声明后,初始化内部一维数组时不能简写。
1 2 3 4 5 6 | //不规则二维表定义二维数组 int [][] arr = new int [ 3 ][]; //3行,未知的列 //初始化二维数组内的元素值 arr[ 0 ] = new int []{ 1 }; //此处不能简写为arr[0] = {1} arr[ 1 ] = new int []{ 2 , 3 }; arr[ 2 ] = new int []{ 4 , 5 , 6 }; |
4.二维数组的遍历
二维数组的遍历和一维数组一样,区别就是,首先要在外循环,遍历每个一维数组,其一般格式如下:
1 2 3 4 5 6 | for ( int i= 0 ;i<二维数组名.length;i++) { for ( int j= 0 ;j<二维数组名[i].length;j++) { System.out.print(二维数组名[i][j]); } System.out.println(); } |
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程