Dotcpp  >  编程教程  >  Java数组  >  Java二维数组

Java二维数组

点击打开在线编译器,边学边练

在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();
}



本文固定URL:https://www.dotcpp.com/course/886

上一课:

Java一维数组

下一课:

Java多维数组

Java教程
第一章 Java入门
第二章 Java运算符和表达式
第三章 Java流程控制
第四章 Java类和对象
第五章 Java子类与继承
第六章 Java接口与实现
第七章 Java内部类与异常类
第八章 Java常用实用类
第九章 Java输入输出流
第十章 Java数组
Dotcpp在线编译      (登录可减少运行等待时间)