第4章-第2节-Java中的数组相关知识点

2023-12-16 21:36:05

1、一维数组

1)、数组使用过程中可能出现的问题

常见的运行时异常:
1).java.lang.ArrayIndexOutOfBoundsException:?? ?数组下标越界异常
2).java.lang.NullPointerException:?? ??? ?空指针异常


2)、参数传递

两种方式:

方式一:普通常量值传递

方法的形参是基本类型,调用方法执行的过程中,将基本类型数据(常量值)传递给到形参位置;
理解:将基本类型数据copy一份给到方法的形参,有两种基本类型数据,你一份、我一份,彼此独立;
注意:其中任一一份数据内容受到了变化,不会影响到另一份数据


方式二:引用地址值传递

方法的形参是引用类型,调用方法执行的过程中,将引用类型数据(地址值)传递给到形参位置;
理解:将引用类型数据copy一份给到方法的形参,两处变量都握着同一份地址,意味着都指向同一个堆中对象;
注意:通过其中一方地址去操作堆中对象,改变了对象内部的数据内容;再通过另一方地址进行访问,
? ? ? 看到的一定是改动以后的效果


3)、数组常用操作

再谈数组遍历

需求:
?? ?①.数组长度从键盘读入
?? ?②.数组元素赋值从键盘读入
?? ?③.遍历打印数组元素
?? ? ?效果如下:
?? ??? ?88,37,-12,0,100,69

要求:结合2个自定义方法实现

自定义方法:得到int数组?? ??? ?方法名:getArray
实现:①、②
两个环节:
?? ?1).返回值??? ?有,int[]类型
?? ?2).形参??? ?没有

自定义方法:遍历打印数组元素?? ?方法名:printArray
实现:③
两个环节:
?? ?1).返回值??? ?没有,void
?? ?2).形参??? ?有,int[]类型


第一波:最值(最大、最小)、总和、平均值、反转

第二波:排序、查找


排序操作:

核心:升序(小 -> 大)、降序(大 -> 小)

选择排序之升序操作

需求:
?? ?①.数组长度从键盘读入
?? ?②.数组元素赋值通过随机数实现?? ?范围:[1,100]
?? ?③.遍历打印数组元素
?? ?④.选择排序之升序操作

要求:3个自定义方法实现

自定义方法:得到int数组?? ??? ?getArray
实现:①、②
两个环节:
?? ?1).返回值??? ?有,int[]类型
?? ?2).形参??? ?没有

自定义方法:遍历打印数组元素?? ?printArray
实现:③
两个环节:
?? ?1).返回值??? ?没有,void
?? ?2).形参??? ?有,int[]类型

自定义方法:选择排序之升序操作?? ?selectSort
实现:④
两个环节:
?? ?1).返回值??? ?没有,void
?? ?2).形参??? ?有,int[]类型


查找操作:

作用:通过数组名、元素内容找到对应的下标

一般查找法:

前提条件/要求:查找操作之前,不可以对元素先进行排序操作

2、二维数组

一维数组:一行多列
二维数组:多行多列?? ?称为:二维表(table)

场景一:存储全班学员的考试成绩

解决:使用一维数组实现

场景二:将全班分为若干个组,每个组若干名学员,以组为单位存储各自组员的成绩,最后统一管理

解决:使用二维数组实现


定义格式:

两种情况:

情况一:静态初始化

模板:
?? ?数据类型[][] 数组名 = new 数据类型[][]{一维数组1,一维数组2,...,一维数组n};

?? ?简化形式:

?? ?数据类型[][] 数组名 = {一维数组1,一维数组2,...,一维数组n};

举例:
?? ?需求:将全班分为3个组,每个组3名学员,以组为单位存储各自组员的成绩,最后统一管理

?? ?代码:
?? ??? ?int[][] scores = {{62,88,75},{100,51,80},{80,60,100}};

?? ?内存:
?? ??? ?步骤一:创建二维数组容器,元素赋默认值
?? ??? ??? ?二维数组:{null,null,null}?? ??? ?地址:0x1234

?? ??? ?步骤二:创建3个一维数组容器,元素赋默认值
?? ??? ??? ?一维数组1:{0,0,0}?? ??? ??? ?地址:0x111
?? ??? ??? ?一维数组2:{0,0,0}?? ??? ??? ?地址:0x222
?? ??? ??? ?一维数组3:{0,0,0}?? ??? ??? ?地址:0x333

?? ??? ?步骤三:为每个一维数组元素进行显示赋值操作
?? ??? ??? ?一维数组1:{62,88,75}? ? ? ? ? ? ? 地址:0x111
?? ??? ??? ?一维数组2:{100,51,80}?? ??? ??? ?地址:0x222
?? ??? ??? ?一维数组3:{80,60,100}?? ??? ??? ?地址:0x333

?? ??? ?步骤四:将二维数组每个元素关联对应一维数组的地址
?? ??? ??? ?二维数组:{0x111,0x222,0x333}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 地址:0x1234

?? ??? ??? ?变相理解:

?? ??? ??? ?二维数组:{{62,88,75},{100,51,80},{80,60,100}}?? ??? ?地址:0x1234


情况二:动态初始化

两种情况:

情况一:行和列都明确

模板:
?? ?环节一:创建二维数组&多个一维数组容器,并且将一维数组地址关联到二维数组元素位置
?? ?数据类型[][] 数组名 = new 数据类型[行数/二维数组元素的个数/一维数组的个数][列数/每个一维数组元素的个数];
?? ?
?? ?环节二:为一维数组元素进行显示赋值操作
?? ?数组名[行][列] = 值;


举例:
?? ?需求1:将全班分为3个组,每个组3名学员,以组为单位存储各自组员的姓名,最后统一管理
?? ?需求2:第一组第一名学员:"张三"
? ? ? ? ? ? ? ? ?第二组第二名学员:"李四"
?? ? ? ? ????????第三组最后一名学员:"王五"
?? ?需求3:得到二维数组的长度以及第一个一维数组的长度,分别打印看效果
?? ?
?? ?代码:
?? ??? ?String[][] names = new String[3][3];
?? ??? ?names[0][0] = "张三";
?? ??? ?names[1][1] = "李四";
?? ??? ?names[2][2] = "王五";

?? ??? ?int size = names.length;? ? ? ? ? ? ? //二维数组长度
?? ??? ?int size2 = names[0].length;?? ??? ?//第一个一维数组长度

?? ?
?? ?内存:
?? ??? ?步骤一:创建二维数组容器,元素赋默认值
?? ??? ??? ?二维数组:{null,null,null}?? ??? ?地址:0x1234

?? ??? ?步骤二:创建3个一维数组容器,元素赋默认值
?? ??? ??? ?一维数组1:{null,null,null}?? ??? ?地址:0x111
?? ??? ??? ?一维数组2:{null,null,null}?? ??? ?地址:0x222?? ??? ?
?? ??? ??? ?一维数组3:{null,null,null}?? ??? ?地址:0x333

?? ??? ?步骤三:将3个一维数组的地址关联到二维数组的元素位置
?? ??? ??? ?二维数组:{0x111,0x222,0x333}?? ??? ?地址:0x1234

?? ??? ??? ?变相理解:
?? ??? ??? ?
?? ??? ??? ?二维数组:{{null,null,null},{null,null,null},{null,null,null}}? ? ? ? ? ? ? ? ? ? ?地址:0x1234

?? ??? ?步骤四;存入学员姓名

?? ??? ??? ?二维数组:{{"张三",null,null},{null,"李四",null},{null,null,"王五"}}?? ??? ?地址:0x1234


情况二:行明确,列不明确

模板:
?? ?数据类型[][] 数组名 = new 数据类型[行数/二维数组元素的个数/一维数组的个数][];

本电子书目录:《Java基础的重点知识点全集》

文章来源:https://blog.csdn.net/jnbbwyth/article/details/135037918
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。