【JavaSE08】多维数组

Java语言里提供了支持多维数组的语法。如果说可以把一维数组当成几何中的线性图形, 那么二维数组就相当于是一个表格。多维数组在本质上是一致的,本文主要讨论二维数组。

对于二维数组的理解,我们可以看成是一维数组 array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组

1 声明

和一维数组类似,语法格式:

数据类型[][] 数组名;// 首选的方法

 

数据类型[] 数组名[];// 效果相同,但不是首选方法

数据类型 数组名[][];// 效果相同,但不是首选方法

2 初始化

2.1 静态初始化

和一维数组类似,语法格式:

数据类型[][] 数组名 = {{值1,值2,···,值i},···,{值1,值2,···,值j}};

 

数据类型[][] 数组名 = new 数据类型[][]{{值1,值2,···,值i},···,{值1,值2,···,值j}};

2.2 动态初始化

语法格式1:

数据类型[][] 数组名 = new 数据类型[数组元素个数1][数组元素个数2];

例如int[][] arr = new int[3][2];定义了名称为arr的二维数组。二维数组中有3个一维数组 每一个一维数组中有2个元素 一维数组的名称分别为arr[0], arr[1], arr[2] 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;

语法格式2:

数据类型[][] 数组名 = new 数据类型[数组元素个数1][];

例如int[][] arr = new int[3][]; 二维数组中有3个一维数组。 每个一维数组都是默认初始化值null (注意:区别于格式1) 可以对这个三个一维数组分别进行初始化; arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2]; 。

3 引用

与一维数组类似,通过索引(下标)的方式实现。

语法格式:

数组名[数组元素下标1][数组元素下标2];

数组元素个数与一维数组不同:

  • 数组名.length;表示二维数组有多少个一维数组。

  • 数组名[元素下标].length;表示数组元素第 元素下标 个一维数组有多少个元素。

4 遍历

使用双层循环实现:

int[][] num = {{1,8,92},{9,7,55},{0,66,2}};  
for (int i = 0; i < num.length; i++) {
    for (int j = 0; j < num[i].length; j++) {        
        
    }    
}

5 默认初始化值

规定:二维数组分为外层数组的元素,内层数组的元素。例如int[][] arr = new int[4][3]; 的外层元素有arr[0] ,arr[1] 等;内层元素有arr[0][0] ,arr[1][2] 等。

针对于初始化方式一,比如:int[][] arr = new int[4][3];

  • 外层元素的初始化值为:地址值

  • 内层元素的初始化值为:与一维数组初始化情况相同

针对于初始化方式二,比如:int[][] arr = new int[4][];

  • 外层元素的初始化值为:null

  • 内层元素的初始化值为:不能调用,否则报错。

6 内存解析

例如:

int[][] arr = new int[4][];//①
arr[1] = new int[]{1,2,3};//②
arr[2] = new int[4];//③
arr[2][1] = 30;//④

①时内存状态

②时内存状态:

③时内存状态:

④时内存状态:

7 案例

7.1 基本操作

//二维数组的声明   三种形式
//声明int类型的二维数组  
int[][] intArray;  
//声明float类型的二维数组  
float floatArray[][];  
//声明double类型的二维数组  
double[] doubleArray[];  
//创建一个三行三列的int类型的数组  
intArray=new int[3][3];  
System.out.println("intArray数组的第3行第2列的元素为:"+intArray[2][1]);  
//为第2行第3个元素赋值为9  
intArray[1][2]=9;  
System.out.println("intArray数组第2行第3列的元素为:"+intArray[1][2]);  
//声明数组的同时进行创建  
char[][] ch=new char[3][5];  
//创建float类型的数组时,只指定行数  
floatArray=new float[3][];  
//System.out.println(floatArray[0][0]);  
//每行相当于一个一维数组,需要创建  
floatArray[0]=new float[3];//第一行有三列  
floatArray[1]=new float[4];//第二行有四列  
floatArray[2]=new float[5];//第三行有5列  
System.out.println(floatArray[0][0]);  
//System.out.println(floatArray[0][3]);//数组下标越界 //二维数组的初始化  
int[][] num={{1,2,3},{4,5,6},{7,8,9}};   
System.out.println("num数组第1行第2列的元素为:"+num[0][1]);  
System.out.println("num数组的行数为:"+num.length);  
System.out.println("num数组的列数为:"+num[0].length); 
int[][] num1={{78,98},{65,75,63},{98}};  
System.out.println("num1数组的第1行的列数为:"+num1[0].length);  
//循环输出二维数组的内容  
for(int i=0;i<num1.length;i++){  
    for(int j=0;j<num1[i].length;j++){
        System.out.print(num1[i][j]+"     ");  
    }  
    System.out.println();  
}  

7.2 打印杨辉三角

使用二维数组打印一个 10 行杨辉三角。

杨辉三角:

  • 第一行有 1 个元素, 第 n 行有 n 个元素

  • 每一行的第一个元素和最后一个元素都是 1

  • 从第三行开始, 对于非第一个元素和最后一个元素的元素。存在yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];关系

int[][] yanghui = new int[10][];
int i, j;
for (i = 0; i < yanghui.length; i++) {
    yanghui[i] = new int[i + 1];
    for (j = 0; j < yanghui[i].length; j++) {
        if (j == 0 || j == yanghui[i].length - 1) {
            yanghui[i][j] = 1;
        } else {
            yanghui[i][j] = yanghui[i - 1][j - 1] + yanghui[i - 1][j];
        }
    }
}
for (i = 0; i < yanghui.length; i++) {
    for (j = 0; j < yanghui[i].length; j++) {
        System.out.print(yanghui[i][j] + " ");
    }
    System.out.println(" ");
}

 

 

版权声明:
作者:jackqiang
链接:http://www.jackqiang.com/javase/array/2060/md-array/
来源:JackQiang's
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录