在Java中,二维数组被看作数组的数组,即二维数组是一个特殊的一维数组,二维数组的每个元素都是一个一维数组。

1.二维数组的定义

1)格式一:

元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][一维数组的长度];

int[][] arr = new int[3][2];

以上这种情况代表有3个一维数组,且每个一维数组有2个元素。

2)格式二:

元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][];

int[][] arr = new int[3][];

以上这种情况代表有3个一维数组,但每个一维数组的元素个数不确定,且每个一维数组的元素个数可以不一样。

3)格式三:

元素的数据类型[][] 数组的名字 = {{元素1,元素2,…},{元素1,元素2,…},…};

int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};

以上这种情况代表有3个一维数组,第一个一维数组中有3个元素,第二个一维数组中有2个元素,第三个一维数组中有4个元素,每个一维数组的元素个数可以不一样。

2.二维数组的声明

声明二维数组有下列两种格式:

数组的元素类型 数组名[][];

数组的元素类型 [][] 数组名;

例如:

char cat[][];
char [][] cat;

3.二维数组的初始化

二维数组的初始化同一维数组一样,有两种方式:动态初始化和静态初始化。

(1) 静态初始化

1)先声明再静态初始化

元素的数据类型[][] 二维数组名;
二维数组名 = new 元素的数据类型[][]{{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};

2)声明的同时静态初始化

元素的数据类型[][] 二维数组名 = new 元素的数据类型[][]{{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};

注意:右边“new 元素的数据类型[][]”中“[][]”中不能写数字,因为行数和列数由{}中的元素个数决定。

3)声明的同时静态初始化的简化写法

元素的数据类型[][] 二维数组名 = {{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};

例如:

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)动态初始化一:规则二维表

程序员指定数组的长度,后期再赋值,一开始系统会先给定元素默认初始值,规则二维表也就意味着每一行的列数是相同的,其一般格式如下,首先确定行数和列数:

元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n];

其中m表示这个二维数组有多少个一维数组,或者说二维表一共有几行;n表示每个一维数组的元素有多少个,或者说每行有几个单元格。

此时创建完数组,行数列数确定,而且元素也都有默认值,再为元素赋新值:

二维数组名[行下标][列下标] = 值;

例如:

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)动态初始化二:不规则二维表

不规则二维表也就意味着每一行的列数可能不一样,其一般格式如下,首先确定总行数:

元素的数据类型[][] 二维数组名 = new 元素的数据类型[总行数][];

此时只是确定了总行数,每一行里面现在是null,然后再确定每一行的列数,创建每一行的一维数组:

二维数组名[行下标] = new 元素的数据类型[该行的总列数];

此时通过new的行的元素就有默认值,没有通过new的行还是null,最后为元素赋值:

二维数组名[行下标][列下标] = 值;

注意:不规则二维表,声明后,初始化内部一维数组时不能简写。

//不规则二维表定义二维数组
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.二维数组的遍历

二维数组的遍历和一维数组一样,区别就是,首先要在外循环,遍历每个一维数组,其一般格式如下:

for(int i=0;i<二维数组名.length;i++) {
    for(int j=0;j<二维数组名[i].length;j++) {
        System.out.print(二维数组名[i][j]);
    }
    System.out.println();
}


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)