第4章-第2节-Java中的数组相关知识点
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基础的重点知识点全集》
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!