01-数组介绍

  • 介绍 : 数组就是一种容器, 可以存储同种数据类型的多个值

    02-数组的定义格式

  • 数据类型[] 数组名;

    1. int[] arr;
  • 数据类型 数组名[];

    1. int arr[];

    03-数组的静态初始化

  • 完整格式 : ```java 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3..};

int[] arr = new int[]{11,22,33};

错误代码: int[] arr = new int[3]{11,22,33};

  1. - 简化格式 :
  2. ```java
  3. 数据类型[] 数组名 = {元素1,元素2,元素3..};
  4. int[] arr = {11,22,33};
  5. 注意: 简化格式, 简化的只是书写格式, 等到运行的时候, 还是按照完整格式运行的.

注意 : 打印数组名, 看到数组的十六进制内存地址 [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-二维数组介绍

  • 介绍 : 二维数组也是一种容器, 内部存储的都是一维数组
  • 使用场景 :

    • 发现手里有多个数组, 多个数组属于一个整体, 那就找个更大的容器, 装起来

      10-二维数组静态初始化

  • 完整格式

    数据类型[][] 数组名 = 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
         请使用所学的二维数组技术, 计算出公司(每个季度的)营业额, 并打印
      */