学习内容:
数组
一维数组
二维数组
数组操作的两个常见错误
学习时间:
2020-11-17
学习产出:
数组
数组概念:
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
数组的初始化
Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
初始化的分类:
a:动态初始化: 只指定长度,由系统给出初始化值
b:静态初始化: 给出初始化值,由系统决定长度
注意事项: 这两种方式,只能使用一种,不能进行动静结合
一维数组
定义格式
格式1: 数据类型[] 数组名;
格式2: 数据类型 数组名[];
(下面的演示以格式1为例)
初始化
A:动态初始化的格式:
数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数。
B:静态初始化的格式:
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例: int[] arr = new int[]{1,2,3};
简化格式:
数据类型[] 数组名 = {元素1,元素2,…};
演示:
定义一个数组,输出数组名称和数组中的元素值,给数组赋值,再次输出数组名称和数组中的元素值(动态初始化)
演示:
定义两个数组,分别输出数组名称和数组中的元素值,分别给两个数组赋值,再次输出数组名称和数组中的元素值(第一个动态初始化,第二个静态初始化)
演示:
定义第一个数组,定义完毕后,给数组元素赋值。赋值完毕后,再输出数组名称和元素。
定义第二个数组,定义完毕后,给数组元素赋值。赋值完毕后,再输出数组名称和元素。
定义第三个数组,把第一个数组的地址值赋值给它。(注意类型一致),通过第三个数组的名称去把元素重新赋值。
最后,再次输出第一个数组数组名称和元素。
演示
数组获取最值(获取数组中的最大值或者最小值)
演示
数组元素反转(就是把元素对调)
演示:
数组查表法(根据键盘录入索引,查找对应星期)
演示:
数组元素查找(查找指定元素第一次在数组中出现的索引)
二维数组
二维数组格式
1、数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组
n表示每一个一维数组的元素个数
2、数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
3、数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}...};
简化版:
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
这个格式属于静态初始化:由我们指定具体的元素值,由系统给分配长度
其他定义方法:
4、数据类型 数组名[][] = new 数据类型[m][n];
5、数据类型[] 数组名[] = new 数据类型[m][n];
(以下演示均采用第一种定义方法)
演示:
需求:公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
演示:
打印杨辉三角形(行数可以键盘录入)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
数组操作的两个常见错误
a:ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
比如说一维数组arr[4]当中有4个元素 其编号为0,1,2,3
访问arr[3]时,表示访问第四个元素
访问arr[4]时,因为数组越界会报错
b:NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素
比如说在调用方法结束之后堆内存当中存储的东西会被垃圾处理器回收,这时候再去访问它,就会访问不到,显示空指针异常。