Java数组

0x01 认识数组

1、什么是数组

数组就是用来存储一批同种类型数据的容器。

int[] arr = {20, 10, 80, 60, 90};
String[] names = {"张三", "李四", "王二"};

2、为什么要用数组

假如用变量学生名字,然后完成随机点名功能,怎么实现?存在有什么问题?

String name1 = "张誉";
String name2 = "刘疏桐";
String name3 = "田启峰";
...
...
String name68= "张学颖";
String name69= "李沁霖";
String name70= "陈侃";

从上面代码可以发现使用变量会导致代码繁琐,大量变量的定义,业务功能实现麻烦。那么下面使用数组,数组适合做一批同种类型数据的存储。

String[] names = {“张誉”, “刘疏桐”, “田启峰”,… “张学颖”, “李沁霖”, “陈侃”,};

0x02 数组的定义

1、静态初始化数组

image-20230715185840472

数组变量名中存储的是数组在内存中的地址,数组是引用类型。完整格式写法如下

//数据类型[]  数组名 = new 数据类型[]{元素1,元素2 ,元素3… };

double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
int[] ages = new int[]{12, 24, 36};

简化格式写法

//数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };

int[] ages = {12, 24, 36};

2、动态初始化数组

定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据

//写法  数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3] 

image-20230715192351259

public class ArrayDemo {
    public static void main(String[] args) {
        //1.先定义
        int[] arr = new int[3];  // 默认值 arr = [0,0,0]
        System.out.println(arr[0]); //0
        System.out.println(arr[1]); //0
        System.out.println(arr[2]); //0
        //2.后赋值
        arr[0] = 12;
        arr[1] = 18;
        arr[2] = 32;
        System.out.println(arr[0]); //12
        System.out.println(arr[1]); //18
        System.out.println(arr[2]); //32
    }
}

3、定义数组的注意事项

1)“数据类型[] 数组名”也可以写成 “数据类型 数组名[] ”。

int[] ages =...;  
int ages[] =...;  

double[] scores = ...;
double scores[] = ...;

2)什么类型的数组存放什么类型的数据,否则报错。

3)数组一旦定义出来,程序执行的过程中,长度、类型就固定了。

4)元素默认值规则

image-20230715193316511

5)两种初始化的的使用场景总结、注意事项说明

动态初始化:只指定数组长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景。

静态初始化:开始就存入元素值,适合一开始就能确定元素值的业务场景。

两种格式的写法是独立的,不可以混用。

//错误写法
int[] arrs = new int[3]{30,40,50};

0x03 数组的访问及其遍历

image-20230715185810337

1、访问数组的全部数据

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = {12, 24, 36};
        //访问数组的全部数据
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

2、修改数组中的数据

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = {12, 24, 36};
        //修改数组中的数据
        arr[0] = 66;
        arr[2] = 100;
        System.out.println(arr[0]);  //66
        System.out.println(arr[1]);
        System.out.println(arr[2]);  //100
    }
}

3、访问数组的元素的个数

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = {12, 24, 36};
        //访问数组的元素的个数
        System.out.println(arr.length);  //3
    }
}

4、数组的最大索引

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = {12, 24, 36};
        //获取数组的最大索引,前提是元素个数大于0,否则会抛出异常
        System.out.println(arr.length - 1);  //2
    }
}

5、数组的遍历

遍历:就是一个一个数据的访问。

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = {12, 24, 36};
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

0x04 数组的案例

1、数据遍历-求和

需求:某部门5名员工的销售额分别是:16、26、36、6、100,请计算出他们部门的总销售额。

public class ArrayDemo {
    public static void main(String[] args) {
        //1.定义数组存储销售额
        int[] money = {16, 26, 36, 6, 100};
        //2.定义一个初始变量,用于累加求和
        int sum = 0;
        //3.遍历数组中的每个数据
        for (int i = 0; i < money.length; i++) {
            sum += money[i];
        }
        System.out.println(sum);
    }
}

2、评委打分案例

案例需求:某唱歌比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕之后立即输出平均数作为选手得分

import java.util.Scanner;

public class ArrayDemo {
    public static void main(String[] args) {
        //某唱歌比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕之后立即输出平均数作为选手得分

        //1.定义一个动态初始化的数组,负责后期存储6个评委的打分
        double[] scores = new double[6];
        Scanner sc = new Scanner(System.in);

        //2.遍历数组中的每个位置,录入评委的分数,存入到数组中去
        for (int i = 0; i < scores.length; i++) {
            System.out.print("请输入当前第" + (i + 1) + "个评委的分数: ");
            double score = sc.nextDouble();
            scores[i] = score;
        }

        //3.遍历数组中的每个元素进行求和
        double sum = 0;
        for (int i = 0; i < scores.length; i++) {
            sum += scores[i];
        }
        System.out.println("选手最终的得分是" + sum / scores.length);
    }
}

0x05 数组在计算机中的执行原理

1、Java内存分配、数组内存图

image-20230715221719287

image-20230715221622455

2、两个变量指向同一个数组

image-20230715221828561

0x06 数组使用的常见问题

image-20230715221931996

posted @ 2023-07-15 22:30  charonlight  阅读(25)  评论(0编辑  收藏  举报