01-数组介绍
-
02-数组的定义格式
数据类型[] 数组名;
int[] arr;
数据类型 数组名[];
int arr[];
03-数组的静态初始化
完整格式 : ```java 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3..};
int[] arr = new int[]{11,22,33};
错误代码: int[] arr = new int[3]{11,22,33};
- 简化格式 :
```java
数据类型[] 数组名 = {元素1,元素2,元素3..};
int[] arr = {11,22,33};
注意: 简化格式, 简化的只是书写格式, 等到运行的时候, 还是按照完整格式运行的.
注意 : 打印数组名, 看到数组的十六进制内存地址 [I@233ac34 [ : 当前的空间是数组类型, 几个中括号, 就是几维数组 I : 数组的数据类型 @ : 分隔符 233ac34 : 十六进制地址
数组的元素访问
-
04-数组的遍历操作
介绍 : 获取到数组中的每一个元素进行操作
场景 : 如果要实现的需求, 需要操作到数组的每个元素, 就需要遍历数组
*/ public static void main(String[] args) { int[] arr = {11, 22, 33, 44, 55}; for (int i = 0; i < arr.length; i++) { // i : 索引 // arr[i] : 元素 System.out.println(arr[i]); } } }
案例 :
/* 需求: 模拟随机点名器, 从字符串数组中, 随机取出一个元素, 打印在控制台 */ public static void main(String[] args) { String[] names = {"张三", "李四", "王五"}; Random r = new Random(); // 指挥random, 产生一个随机数, 随机数的范围和数组的索引能够对应上 int index = r.nextInt(names.length); // 拿着这个随机数, 当作为索引, 去数组中获取元素 System.out.println(names[index]); }
案例 :
package com.itheima.test; public class ArrayTest5 { /* 需求: 已知班级学生成绩为 int[] arr = {100,50,20,90,90}; 1. 找出数组最大值, 并打印在控制台 2. 找出数组最小值, 并打印在控制台 3. 求总成绩, 并打印在控制台 4. 计算出平均值, 并打印在控制台 5. 统计出低于平均值元素的个数 */ public static void main(String[] args) { int[] arr = {100, 50, 20, 90, 90}; // 1. 找出数组最大值 int max = arr[0]; for (int i = 1; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; } } // 2. 找出数组最小值 int min = arr[0]; for (int i = 1; i < arr.length; i++) { if (arr[i] < min) { min = arr[i]; } } // 3. 求总成绩 int sum = 0; for (int i = 0; i < arr.length; i++) { sum += arr[i]; } // 4. 计算出平均值 double avg = (sum * 1.0) / arr.length; // 5. 统计出低于平均值元素的个数 int count = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] < avg) { count++; } } System.out.println("最大值为:" + max); System.out.println("最小值为:" + min); System.out.println("总成绩为:" + sum); System.out.println("平均分为:" + avg); System.out.println("低于平均分成绩的人数为:" + count); } }
05-数组的动态初始化
介绍 : 在初始化的时候, 只需要指定长度, 系统就会分配默认值 (初始值)
格式 : 数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];
默认值的分类 ```java 整数 : 0 小数 : 0.0 布尔 : false 字符 : ‘\u0000’ — Unicode字符 — 常见的体现是空白字符 引用数据类型: null
引用数据类型: 数组, 类, 接口
<a name="c5d7ee04"></a>
### 07-两种初始化的对比
- 区别 :
- 动态初始化 : 手动指定长度, 系统分配默认值
- 静态初始化 : 手动指定元素, 系统计算出数组长度
数组的内存原理
- 务必打开 ppt 将内部流程梳理清楚
- 目标 : int[] arr = {11,22,33}; 脑海中就要有堆内存结构
<a name="8dcc94c9"></a>
### 08-数组的常见问题
- ArrayIndexOutOfBoundsException : 数组索引越界异常
- NullPointerException : 空指针异常
- 原因 : 当引用数据类型变量, 记录到null之后, 代表跟堆内存的连接被切断了
```java
int[] arr = {11,22,33};
arr = null;
System.out.println(arr[0]);
09-二维数组介绍
- 介绍 : 二维数组也是一种容器, 内部存储的都是一维数组
使用场景 :
完整格式
数据类型[][] 数组名 = new 数据类型[][]{ {一维数组1}, {一维数组2} }; 例: int[][] arr = new int[][] {{11,22,33},{44,55,66}};
简化格式 ```java 数据类型[][] 数组名 = {
{一维数组1}, {一维数组2}
};
int[][] arr = {{11,22,33},{44,55,66}};
> 二维数组存储一维数组的时候, 具体存储的是一维数组的内存地址
- 二维的数组的元素访问
```java
格式 : 数组名[m索引][n索引];
m索引 : 访问哪一个一维数组
n索引 : 访问一维数组中的哪一个元素
System.out.println(arr[1][2]); // 代表的是:第一个一维数组中的第二个索引的元素
11-二维数组遍历操作
- 思路
- 遍历二维数组, 获取每一个一维数组
- 继续遍历一维数组, 获取元素
int[][] arr = {{11,22,33},{44,55,66}}; // 遍历二维数组, 获取每一个一维数组 for(int i = 0; i < arr.length; i++){ // arr[i] : 每一个一维数组 // 继续遍历一维数组, 获取元素 for(int j = 0; j < arr[i].length; j++){ System.out.println(arr[i][j]); } }
案例:
/* 需求: 已知某公司营业额如下 第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99 请使用所学的二维数组技术, 计算出公司年度总营业额, 并打印 */
案例:
/* 需求: 已知某公司营业额如下 第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99 请使用所学的二维数组技术, 计算出公司(每个季度的)营业额, 并打印 */