今日内容

1.为什么要有数组?

如果需要存储多个变量,用定义变量的方式就太麻烦了

可以定义一个数组,一个数组可以存储相同类型的多个变量

2.数组的定义

动态初始化
    数据类型[] 数组名 = new 数据类型[长度];
    int[] arr = new int[7];

静态初始化
     数据类型[] 数组名 = new 数据类型[]{数据,数据,数据};
     简化:a
     数据类型[] 数组名 = {数据,数据,数据};
     
     
数组的特点:
    1.一个数组只能存相同类型的数据
    2.数组一旦创建长度就固定了,不能改变

3.索引和元素

元素:
    元素就是数组里面的每个数据

索引:
    索引就是每个数据的位置,索引永远从0开始

数组图

4.数组的两个常见问题

索引越界:
    如果操作了范围外的索引,就会出现索引越界异常
    ArrayIndexOutOfBoundsException
    
        int[] arr = {11,22,33};
        System.out.println(arr[3]);


空指针:
    如果给数组赋值为null,表示数组为空,只要操作数组的元素就会出现空指针异常
    NullPointerException
    
        int[] arr = null;
        System.out.println(arr[3]);

5.数组的遍历

public class Demo03 {
    public static void main(String[] args) {

        //定义数组
        int[] arr = {11,22,33,44,66,77};

        //一
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println(arr[3]);
        System.out.println(arr[4]);
        System.out.println(arr[5]);

        //二
        for (int i = 0; i < 6; i++) {
            System.out.println(arr[i]);
        }

        //三   数组名.length 代表数组的长度
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

6.数组的内存图

6.1一个数组的内存图

内存图

6.2两个数组的内存图

内存图2

6.3两个变量指向同一个数组内存图

内存图3

7.数组的练习

7.1打印大于等于130的元素

package com.itheima02;

public class Demo01 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {120,130,110,125,128,164};

        //打印大于等于130的数字

        //遍历
        for (int i = 0; i < arr.length; i++) {
            //判断
            if(arr[i] >= 130){
                //打印
                System.out.println(arr[i]);
            }
        }


        //注意事项,  遍历的时候  i 是索引    arr[i] 是元素
    }
}

7.2求数组的元素和

package com.itheima02;

public class Demo02 {
    public static void main(String[] args) {

        //定义数组
        int[] arr = {120,130,110,125,128,164};

        //求和
        int sum = 0;

        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }

        //打印
        System.out.println(sum);
    }
}

7.3求数组的元素平均数

package com.itheima02;

public class Demo03 {

    public static void main(String[] args) {

        //定义数组
        int[] arr = {120, 130, 110, 125, 128, 164};

        double sum = 0;

        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }

        System.out.println(sum / arr.length);


    }
}

7.4求数组的最大值

package com.itheima02;

public class Demo04 {

    public static void main(String[] args) {

        //定义数组
        int[] arr = {120, 130, 110, 125, 128, 164};

        //定义变量
        int max = arr[0];

        //遍历
        for (int i = 1; i < arr.length; i++) {
            //比较
            if(arr[i] > max){
                //把max的值替换
                max = arr[i];
            }
        }

        //打印
        System.out.println("最大值是:" + max);

    }
}

7.5求大于等于130的元素个数

package com.itheima02;

public class Demo05 {
    public static void main(String[] args) {

        //定义数组
        int[] arr = {120, 130, 110, 125, 128, 164};

        //定义变量
        int count = 0;

        //遍历
        for (int i = 0; i < arr.length; i++) {
            //判断
            if(arr[i]>=130){
                count++;
            }
        }

        //输出个数
        System.out.println("一共有" + count + "个");
    }
}

7.6键盘输入数组元素

package com.itheima02;

import java.util.Scanner;

public class Demo06 {
    public static void main(String[] args) {

        //定义一个长度为5的数组,数组的元素从键盘输入,最后再遍历打印数组

        //创建数组
        int[] arr = new int[5];

        //创建对象
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入5个整数:");
        //循环
        for (int i = 0; i < arr.length; i++) {
            //把键盘输入的数据放在数组中
            int a = sc.nextInt();
            arr[i] = a;
        }

        //遍历打印
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }

    }
}

7.7随机生成数组元素

package com.itheima02;

import java.util.Arrays;
import java.util.Random;

public class Demo07 {
    public static void main(String[] args) {

        //定义一个长度为5的数组, 数组的元素都是随机生成的1-100之间的数字,最后遍历打印数组

        //定义数组
        int[] arr = new int[5];

        //创建随机数对象
        Random r = new Random();

        //循环5次
        for (int i = 0; i < arr.length; i++) {
            //生成随机数放在数组中
            int a = r.nextInt(100)+1;
            arr[i] = a;

        }

        //输出打印数组
        //如果只是为了打印数组看结果,可以用 Arrays.toString(数组名)
        System.out.println(Arrays.toString(arr));
    }
}

疑难解答

难点练习
如图所示,需要判断数组内的前后数字是否对称.

我的答案:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[7];
        System.out.println("请录入7个整数");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = sc.nextInt();
        }
        boolean flag = false;
        int i = 0;
        int end = arr.length - 1;
        while (i <= end) {
            //验证是否相同,相同增加循环索引 加一 减一
            if (arr[i] == arr[end]) {
                i++;
                end--;
                flag = true;
            } else {
                flag = false;
                break;
            }

        }
        if (flag == true) {
            System.out.println("进去了");
        } else {
            System.out.println("太紧了");
        }
    }
最后修改:2021 年 06 月 27 日 07 : 34 PM
如果觉得我的文章对你有用,请随意赞赏