JavaSE(八) —— 二维数组,数组的总结

二维数组

1.1 二维数组的概念

本质上还是一个一维数组,只是其数组元素又是一个一维数组
举例说明:变量,一维数组,二维数组之间的关系

吸烟:
没钱 1根 一个变量
稍微有钱 一包 一维数组【20根】
有钱 一条 二维数组【10包】

在这里插入图片描述

1.2 二维数组的定义

方式一:元素类型[][] 数组名称;
方式二:元素类型 数组名称[][];
和一维数组一样推荐使用方式一

1.3 二维数组的初始化

静态初始化:
语法:元素类型[][] 数组名称 = new 元素类型[][]{{一维数组1,一维数组2,一维数组3…};
简化:元素类型[][] 数组名称 =m{{一维数组1,一维数组2,一维数组3…};
举例:int[][] arr = new int[][]{{2,3},{5,2,1},{10,45,22,54}};
int[][] arr = {{2,3},{5,2,1},{10,45,22,54}};


动态初始化:
语法:元素类型[][] 数组名称 = new 元素类型[二维数组的长度][一维数组的长度]
举例:int[][] arr = new int[3][4];
说明:定义一个数组arr,二维数组中一维数组的个数为3个,每个一维数组中元素的个数为4个,数组中的值默认为0。

如何创建一个如下的二维数组:外维是3个空间,内维分别是4,5,6个空间。
当时我刚学完二维数组时做这道题都蒙了,因为我在学完一维数组时,就认为数组在动态初始化时一定要给 数组[ ] 这个[ ]中写数字,因为内存要给数组分配空间,但是二维数组只有两个[ ][ ]怎么能给出三个不同长度的一维素组,我那时候一直以为二维数组里面的数组长度是一样的,于是我写成了这样 int[][] a = new int[3][6]


答案:
int[][] a = new int[3][ ]

我个人的理解:
二维数组在动态初始化时一定要给出这个二维数组里包含了几个一维数组,但是这只是给一个二维数组的初始化,内存只给二维素组在栈中赋予了一个地址,而其中的一维素组并没有实际意义,就是null数组,堆中没有空间分配,而至于为什么一位数组在初始化时要在[ ]写下长度,就是因为一维数组只有给定长度才会在栈中有地址指向他,在下面的方法中引用他时才不会出现空指针的问题,而二维数组在初始化时只要给定一位数组的个数,就会有地址指向他,所以java在编译时不会报错

int[][] a = new int[3][];
		System.out.println(a);//[[I@7852e922
		System.out.println(a[2]);//null

内存中的二维数组

public static void main(String[] args) {
    int[][] nums={{10,20,30},{40,50,60}};
    int[][] nums2={{1,2},{3,4},{5,6}};
    int[][] nums3=new int[3][2];
    int[][] nums4=new int[2][];
}

在这里插入图片描述

1.4 二维数组的访问

通过下标访问二维数组

public class test1 {
	public static void main(String[] args) {
		int[][] arr = new int[3][4];
		System.out.println(arr);// [[I@15db9742
		System.out.println(arr.length);// 3
		System.out.println(arr[0]);// [I@6d06d69c
		System.out.println(arr[0].length);// 4
		System.out.println(Arrays.toString(arr));// [[I@6d06d69c, [I@7852e922,[I@4e25154f]
		System.out.println(Arrays.toString(arr[0]));// [0, 0, 0, 0]
		System.out.println(arr[0][1]);//0
	}
}

遍历二维数组

public class test2 {
	public static void main(String[] args) {
		// 如果二维数组中一维数组的元素个数不确定
		// int[][] arr = new int[3][];
		int[][] arr = new int[][] { { 2, 3 }, { 5, 2, 1 }, { 10, 45, 22, 54 } };
		// 遍历arr
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		/*
		 * [I@7852e922 [I@4e25154f [I@70dea4e
		 */
		// 赋值:给arr中的第1个元素修改值
		arr[1] = new int[2];
		// 给arr[0]中的第0个元素修改值
		arr[0][0] = 10;
		// 遍历arr[0]
		for (int i = 0; i < arr[0].length; i++) {
			System.out.println(arr[0][i]);
		}
		// 二维数组的遍历:嵌套for循环
		// 简单for循环
		for (int i = 0; i < arr.length; i++) {
			int[] subArr = arr[i];
			for (int j = 0; j < subArr.length; j++) {
				System.out.println(subArr[j]);
			}
		}
		// 增强for循环
		for (int[] subArr1 : arr) {
			for (int n : subArr1) {
				System.out.println(n);
			}
		}
	}
}

关于数组的小问题总结

无论是一维数组还是二维数组
Java语言中 声明是不能指定其长度[数组中元素的个数]

声明方式:
例如;:
int a [ ] = new int [3];
int a [5]; 非法声明
int intA [ ] [ ] = {{1,2},{2,3},{3,4,5}};
int intB [ 3] [ 2] = {{1,2},{2,4},{4,5}}; 非法声明

还有就是上面那道题的解释
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值