一维数组的介绍和使用

  • 1 一维数组
  • 1.1 数组概述和定义格式说明
  • 1.2 数组的初始化动态初始化
  • 1.3 数组的内存图解
  • 1.3.1 一个数组
  • 1.3.2 两个数组
  • 1.3.3 三个引用2个数组
  • 1.4 数组的初始化静态初始化及内存图
  • 1.5 数组操作的两个常见小问题越界和空指针
  • 1.6 数组的操作
  • 1.6.1 遍历
  • 1.6.2 获取最值
  • 1.6.3 反转
  • 1.6.4 查表法
  • 1.6.5 基本查找


1 一维数组

1.1 数组概述和定义格式说明

A:为什么要有数组
现在需要统计某公司员工的工资情况,例如计算平均工资、找到最高工资等。假设该公司有80名员工,
用前面所学的知识,程序首先需要声明80个变量来分别记住每位员工的工资,然后在进行操作,这样做会显得很麻烦。
为了解决这种问题,Java就提供了数组供我们使用
结论:
数组是存储多个变量(元素)的东西(容器)
这多个变量的数据类型要一致
B:数组概念
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型(后面讲解)。
C:数组定义格式
格式1: 数据类型[] 数组名;
格式2: 数据类型 数组名[];
举例:
int[] a; 定义了一个int类型的数组a;
int a[]; 定义了一个int类型的a数组;
推荐使用第一种定义方式。

1.2 数组的初始化动态初始化

A:什么是数组的初始化
Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
B:初始化的分类:
a:动态初始化: 只指定长度,由系统给出初始化值
b:静态初始化: 给出初始化值,由系统决定长度
注意事项: 这两种方式,只能使用一种,不能进行动静结合
C:动态初始化的格式:
数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数。
举例: int[] arr = new int[3]; 定义了一个int类型的数组arr,这个数组可以存放3个int类型的值。
D:案例演示
输出数组名称和数组元素

public class MyDemo {
    public static void main(String[] args) {
        //动态初始化定义数组的语法
        int[] arr=new int[5]; //定义了一个int类型的数组,数组的长度为5
        double[] arr2=new double[10];
        boolean[] arr3=new boolean[2];

        //定义数组的语法2
        byte arr4[]=new byte[4]; 

        int one=arr[0];
        arr[0]=100; //为数组的第一个元素重新赋值

        System.out.println(arr[0]);
    }
}

1.3 数组的内存图解

1.3.1 一个数组

java一维数组Fibonacci数列 java一维数组的使用_java一维数组Fibonacci数列

1.3.2 两个数组

java一维数组Fibonacci数列 java一维数组的使用_初始化_02

1.3.3 三个引用2个数组

定义第一个数组,定义完毕后,给数组元素赋值。赋值完毕后,再输出数组名称和元素。
定义第二个数组,定义完毕后,给数组元素赋值。赋值完毕后,再输出数组名称和元素。
定义第三个数组,把第一个数组的地址值赋值给它。(注意类型一致),通过第三个数组的名称去把元素重新赋值。
最后,再次输出第一个数组数组名称和元素。

java一维数组Fibonacci数列 java一维数组的使用_初始化_03

1.4 数组的初始化静态初始化及内存图

A:静态初始化的格式:

格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};

举例: int[] arr = new int[]{1,2,3};

简化格式:

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

举例: int[] arr = {1,2,3};

B:画图演示

a:定义一个数组,输出数组名称和数组中的元素值

java一维数组Fibonacci数列 java一维数组的使用_初始化_04

1.5 数组操作的两个常见小问题越界和空指针

a:ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
b:NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

1.6 数组的操作

1.6.1 遍历

public static void main(String[] args) {
        int[] arr={10,20,30,40,50,60};
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        System.out.println("------------------------------");
        for (int i = arr.length-1; i >= 0; i--) {
            System.out.println(arr[i]);//反向遍历
        }
    }

1.6.2 获取最值

int[] arr={10,40,30,80,50,60};
        int max=arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(max<arr[i]){
                max=arr[i];
            }
        }
        System.out.println(max);

1.6.3 反转

int[] arr={10,40,30,80,50,60};
        for (int i = 0; i < arr.length/2; i++) {
            int t=0;
            t=arr[i];
            arr[i]=arr[arr.length-1-i];
            arr[arr.length-1-i]=t;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

1.6.4 查表法

public static void main(String[] args) {
        String[] arr={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入数字:");
        int n=sc.nextInt();
        String week=getWeek(n,arr);
        System.out.println(week);
    }
    public static String getWeek(int a,String[] arr){
        if(a>0&&a<8){
            return arr[a];
        }else{
            return "你的输入不合法!";}
    }

1.6.5 基本查找

public static void main(String[] args) {
        String[] arr={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入星期:");
        String n=sc.nextLine();
        int a=getWeek(n,arr);
        System.out.println(a);
    }
    public static int getWeek(String n,String[] arr){
        int a=-1;
        for (int i = 0; i < arr.length; i++) {
            if(n.equals(arr[i])){
                a=i;
                break;
            }
        }
        return a;
    }