小白自学笔记——JAVA基础 3.2 多维数组

本文详细介绍了Java中的二维数组,包括声明、初始化、元素访问、数组长度获取及遍历方法。通过实例展示了二维数组的内存结构,并提供了两个练习题加深理解。此外,文章还探讨了数组元素的默认初始化值及其表示形式。
摘要由CSDN通过智能技术生成

名词解释

  • Java 语言里提供了支持多维数组的语法。
  • 如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格,像Excel中的表格一样。
  • 对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组

二维数组的声明和初始化
在这里插入图片描述
在这里插入图片描述

//1.二维数组的声明和初始化
		int[] arr = new int[]{1,2,3};//一维数组
		//静态初始化
		int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};//二维数组静态
		//动态初始化1
		String[][] arr2 = new String[3][2];
		//动态初始化2
		String[][] arr3 = new String[3][];
		//错误情况
		//String[][] arr4 = new String[][4];
		//String[4][3] arr5 = new String[][];
		//int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};
		
		//正确情况
		int arr4[][] = new int[][]{{1,2,3},{4,5},{6,7,8}};
		int[] arr5[] = new int[][]{{1,2,3},{4,5},{6,7,8}};
		int[] arr6[] = {{1,2,3},{4,5},{6,7,8}};//声明和静态初始化在一行内可以这样写,称为类型推断。

如何调用数组的指定位置元素

System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null
		
arr3[1] = new String[4];
System.out.println(arr3[1][0]);

获取数组的长度

System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//2

如何遍历二维数组

for(int i = 0;i < arr4.length;i++){
			
	for(int j = 0;j < arr4[i].length;j++){
		System.out.print(arr4[i][j]);
	}
	System.out.println();
}

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

eg:

		int[][] arr = new int[4][3];
		System.out.println(arr[0]);//[I@15db9742(地址值:一维数组,int型,15db9742)
		System.out.println(arr[0][0]);//0
		System.out.println(arr);//[[I@6d06d69c(二维数组,int型,6d06d69c)
		
		System.out.println("***********************");
		float[][] arr1 = new float[4][3];
		System.out.println(arr1[0]);//[F@7852e922(地址值:一维数组,float型,7852e922)
		System.out.println(arr1[0][0]);//0.0
		
		System.out.println("***********************");
		String[][] arr2 = new String[4][3];
		System.out.println(arr2[0]);//[Ljava.lang.String;@4e25154f(地址值:一维数组,String型,4e25154f)
		System.out.println(arr2[0][0]);//null
		
		System.out.println("***********************");
		double[][] arr3 = new double[4][];
		System.out.println(arr3[0]);//null(一维double型数组,是引用类型,所以是null)
		//System.out.println(arr3[0][0]);//报错:空指针异常

二位数组内存结构解析
在这里插入图片描述
练习1
在这里插入图片描述

int[][] arr = new int[][]{{3,5,8},{12,9},{7,0,6,4}};
			
int sum = 0;
for(int i = 0;i < arr.length;i++){
	for(int j = 0;j < arr[i].length;j++){
		sum += arr[i][j];
	}
}
System.out.println("总和为" + sum);

练习2
声明:int[] x,y[]; 在给x,y变量赋值以后,以下选项允许通过编译的是:
a ) x[0] = y;
b) y[0] = x;
c) y[0][0] = x;
d) x[0][0] = y;
e) y[0][0] = x[0];
f) x = y;

答案:
a)x[0]是数,y是二维,no
b)y[0]和x都是一维,yes
c)y[0][0]是数,x是一维,no
d)x[0][0]不存在,no
e)y[0][0]和x[0]都是数,yes
f) x一维,y二维,no

练习3
在这里插入图片描述

public class YangHuiTest {
	public static void main(String[] args) {
		//1.声明并初始化二维数组
		int[][] yangHui = new int [10][];
		//2.给数组的元素赋值
		for(int i = 0;i < yangHui.length;i++){
			yangHui[i] = new int[i + 1];
			
			//2.1给每行首末位赋值
			yangHui[i][0] = yangHui[i][i] = 1;
			//2.2给每行非首末元素赋值
			//if(i > 1){
				for(int j = 1;j < yangHui[i].length - 1;j++){
					yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
				}
			//}
		}
		//3.遍历二维数组
		for(int i = 0;i < yangHui.length;i++){
			for(int j = 0;j < yangHui[i].length;j++){
				System.out.print(yangHui[i][j] + " ");
			}
			System.out.println();
		}
	}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值