Java基础——3、数组(下)——二维数组

本文详细介绍了Java中的二维数组,包括理解、声明、初始化、遍历、内存解析及涉及的算法,如求最大值、最小值、总和、排序算法等。还探讨了数组的复制、反转和查找操作,以及常见的数组异常处理。
摘要由CSDN通过智能技术生成

接上一章
一维数组的使用

1、二维数组的理解

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

2、二维数组的使用:

2.1、声明和初始化

//一维数组的动态初始化:
		//说明该数组可以存放3个元素
		int[] arr1_1=new int[3];
		
		//	二维数组的动态初始化01:
		//说明该二维数组存了3个数组,其中每一数组里面存放2个元素
		int[][] arr3=new int[3][2];

		//	二维数组的动态初始化02
		//说明该二维数组存了3个数组,其中每一数组里面存放n个元素,具体待定
		int[][] arr4=new int[3][];

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

//二维数组的声明和初始化
		int[][] arr2=new int[][]{
   {
   1,2,3},{
   2,1,9,2},{
   4,32,74}};

		//如何调用数组的指定位置的元素?
		//输出第二个数组的第三个元素9
		System.out.println(arr2[1][2]);//输出9
//	二维数组的动态初始化01:
		//说明该二维数组存了3个数组,其中每一数组里面存放2个元素
		int[][] arr3=new int[3][2];
		//如何调用数组的指定位置的元素?
		//输出第一个数组的第一个元素
		System.out.println(arr3[0][0]);//输出0
		
		arr3[0][0]=66;//给该位置赋值
		System.out.println(arr3[0][0]);//输出66

2.3、如何获取数组的长度

//二维数组的声明和初始化
		int[][] arr2=new int[][]{
   {
   1,2,3},{
   2,1,9,2},{
   4,32,74}};

		//获取数组的长度
		System.out.println("数组长度为:"+arr2.length);//数组长度为:3

2.4、如何遍历数组元素

//二维数组的声明和初始化
		int[][] arr2=new int[][]{
   {
   1,2,3},{
   2,1,9,2},{
   4,32,74}};
		//如何遍历数组?
		for (int i = 0; i < arr2.length; i++) {
   
			for (int j = 0; j < arr2[i].length; j++) {
   
				System.out.print(arr2[i][j]+" ");//1 2 3 2 1 9 2 4 32 74
			}
		}

2.5、数组元素的默认初始化值

int[][] arr5=new int[3][2];
		System.out.println(arr5[0]);//[I@15db9742  是一个堆空间的地址值  
		//[I@15db9742 
		//【:一个中括号说明是一维数组   I:说明是int类型  @+地址
		System.out.println(arr5[0][0]);//0
		String[][] arr6=new String[3][2];
		System.out.println(arr6[0]);//[Ljava.lang.String;@6d06d69c
		//[Ljava.lang.String;@6d06d69c
		//一维数组  String类型 @+堆空间地址
		System.out.println(arr6);//[[Ljava.lang.String;@7852e922
		//[[Ljava.lang.String;@7852e922
		//2个【:说明是二维数组  String类似;+堆空间地址

2.5、总结:

在这里插入图片描述

2.6、二维数组的内存解析

1、
放在方法里面的都叫局部变量——放在栈
new 出来的都——放在堆
局部变量arr1先放在栈 在栈空间中声明
后面new的部分会在堆里面声明,首地址值为【0x1234】
栈空间通过这个地址值找到堆空间里面数组的实体结构
从栈再到堆,一开始数组默认数据为null、null、null、null
2、
找到栈空间arr1的第二个数组 通过这个地址值找到堆空间里面的 数组的实体结构
3、
在堆空间生成0x7788的数组,赋值为1,2,3
4、
通过栈空间找到arr1的地址值,找到堆空间的第三个数组 堆空间里面再生成0x6677的数组
0x6677数组的第二个元素赋值为30,

5、
最终方法执行完毕之后,意味着它里面的局部变量没有用了
相继的栈空间里面的arr1会出栈
然后对应的指针就没有了
随后对应的【0x1234】被视为垃圾 最终出栈回收
对应的【0x7788】【0x6677】的指针没有了
对应堆空间里面的【0x7788】【0x6677】会被视为垃圾
最终释放堆空间和栈空间
实现垃圾回收
在这里插入图片描述

2.6、二维数组练习

在这里插入图片描述

public static void main(String[] args) {
   
		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++) 
Java程序设计》课程实验指导书程序代码(答案)(实验三),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验三 类和对象 一、实验目的: 掌握Java类的结构、类的定义、方法和属性的定义以及对象的实现; 掌握类及其成员修饰符的使用;掌握构造函数的使用;方法的参数传递和返回值的用法; 掌握类变量与实例变量,以及类方法与实例方法的区别。 三、实验内容: 1.定义一个学生类(Student),属性有private的名字(name), public的年龄(age),专业(specialty)和封装name属性的方法:setName(),getName(),getspecialty()编写Application,创建一个学生对象,设置name和age属性值,然后调用一个方法(此方法将对象作为参数传递,在方法打印出学生的名字name和年龄age)。(学生类仅包含静态成员变量和方法。) 2.定义一个类Point,代表一个点,public属性有x和y,方法有显示点坐标 show(),构造函数有两个参数分别给x,y赋值,在main方法构造两个对象,再创建一方法(getMiddle)为取两个点构成线段的点的坐标,参数为2个点对象,调用此方法后得到一个新的点,编写Application,显示该对象的坐标值。 3.定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Complex C1,Complex C2) 求两个复数的差的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex subComp(Complex C1,Complex C2) 求两个复数的乘积的方法:(参数是两个复数类对象,返回值是复数类对象,新复数实部=两复数实部乘积-两复数虚部乘积,新复数虚部=两复数实部与虚部交叉乘积之和,)public Complex multiComp(Complex C1,Complex C2) 比较两个复数是否相等的方法(参数是两个复数类对象,返回值是boolean类型)public boolean equalComp(Complex C1,Complex C2) 在Application测试该类的方法,实部x和虚部y可由main方法参数提供输入。 三、实验要求: 1. 正确地定义类、方法和属性; 2. 学会方法的参数传递和返回值的用法; 3. 熟练使用类及其成员修饰符 4.使用构造函数创建类的对象; 5. 类变量与实例变量,以及类方法与实例方法的使用 6.程序应包括各个被调用方法的执行结果的显示。 7.写出实验报告。要求记录编译和执行Java程序当的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)定义一个学生类(Student)及它的属性和方法;定义主类和main(),在main()方法创建学生对象,并通过对象调用它的方法setName(),getName(),输出学生的名字name和年龄age。 2. (第2题) 定义类Point及它的属性、方法和构造函数,定义主类和main(),在main()方法创建两个坐标对象,,并通过对象调用getMiddle方法后得到一个新的点坐标,调用show()显示该对象的坐标值。 3. (第3题)定义一个复数(z=x+iy)类Complex,及它的属性、方法和构造函数;定义主类和main()方法,在main()方法创建两个复数类Complex对象,并通过复数类对象调用它们的属性和方法,输出方法执行结果。 五、自做实验 1. 构造一个类来描述屏幕上的一个点,该类的构成包括点的x和y两个坐标,以及一些对点进行的操作,包括:取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并对其进行操作。 2. 编写实现:有一个三角形类Triangle,成员变量有底边x和另一条边y,和两边的夹角a(0<a<180),a为静态成员,成员方法有两个:求面积s(无参数)和修改角度(参数为角度)。 3. 编写实现: 构造函数为 Triangle(int xx,int yy,int aa) 参数分别为x,y,a赋值 在main方法构造两个对象,求出其面积,然后使用修改角度的方法,修改两边的夹角,再求出面积值。(提示:求高的方法 h=y*Math.sin(a) ) 注意:构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值