【Java学习笔记8】数组Part Ⅲ:多维数组的使用

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

二维数组、三位数组以至于n维数组在本质上是一致的,因此,本文主要讨论二维数组,多维数组可以以二维数组作类比。

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

一、多维数组的声明和初始化

1.1 多维数组的声明方式

语法格式:

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

1.2 多维数组的静态初始化、

语法格式:

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

1.3 多维数组的动态初始化

语法格式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];

二、多维数组元素的引用

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

语法格式:

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

三、多维数组获取数组长度

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

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

四、多维数组的遍历

使用双层循环实现。

五、 多维数组元素的默认初始化值

规定:二维数组分为外层数组的元素,内层数组的元素。例如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
  • 内层元素的初始化值为:不能调用,否则报错。

六、多维数组的内存解析

例如:

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

①时内存状态:

在这里插入图片描述

②时内存状态:

在这里插入图片描述

③时内存状态:

在这里插入图片描述

④时内存状态:

在这里插入图片描述

七、多维数组使用案例

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(" ");
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值