AI智能应用开发(Java)从起点到终点-4.数组

0 阅读4分钟

 

​编辑

一、数组介绍

数组指一种容器,可以存储同种类型的多个值

为什么要使用数组容器?

假设我要计算销售部门的员工业绩,以往的方案是定义变量来保存数据,但是数据一多,变量就要定义一堆,操作起来非常不方方便!但是存入一个容器就好操作了,数据不再零零散散,而是一个整体了。

二 、数组定义格式

静态初始化

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

简化格式:数据类型[] 数组名 = {};

动态初始化

(初始化时只指定数组长度,由系统为数组分配初始值)

数据类型[] 数组名= new 数据类型[数组长度]

三、数组的元素访问

  • 格式:数组名[索引];

  • 索引:索引是数组容器中空间的编号,编号从0开始,逐个+1增长

    public class ArraysDemo1 {
        public static void main(String[] args) {
            int[]arr1 = new int[]{1,2,3,4};
            System.out.println(arr1[0]);
        }
    }
    

四、数组的遍历操作

数组遍历:依次访问数组中的每一个元素

public class ArrayDemo3 {
    /*
        数组遍历操作: 依次访问数组中的每一个元素

        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]);

        弊端: 代码过于臃肿
        优化: 使用循环来进行优化

        for(int i = 0; i < 5; i++){
            // i = 0 1 2 3 4
            System.out.println(arr[i]);
        }

        弊端: 数组的长度不是动态获取的
        优化: 数组名.length

        -------------------------------------------

        数组的通用遍历方式:

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

        
     */
    public static void main(String[] args) {
        int[] arr = {11, 22, 33, 44, 55};

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

    }
}

数组求和案例

public class ArraysDemo2 {
    public static void main(String[] args) {
//        已知数组元素为{11,22,33,44,55)请将数组中偶数元素取出并求和,最后打印求和结果
        int[] arr = {11,22,33,44,55};
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]%2==0){
                sum+=arr[i];
            }
        }
        System.out.println(sum);
    }
}

  1. 数组案例-求最大值

  • 需求:已知数组元素为 {5,44,33,55,22} 请找出数组中最大值并打印在控制台
public class ArraysDemo4 {
    public static void main(String[] args) {
//        - 需求:已知数组元素为 {5,44,33,55,22} 请找出数组中最大值并打印在控制台
       int []arr = {5,44,33,55,22};
       int max= 0;
        for (int i = 0; i < arr.length; i++) {
           if (arr[i]>max){
               max=arr[i];
           }

        }
        System.out.println("最大值"+max);


    }
}

  1. 数组案例-数组反转操作(⭐️⭐️⭐️)

public class ArraysDemo5 {
    public static void main(String[] args) {
//        需求:
//
//        已知一个数组 arr = {11, 22, 33, 44, 55}; 用程序实现把数组中的元素值交换,
//
//        交换后的数组 arr = {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。
        int []arr = {11, 22, 33, 44, 55};


        for (int start = 0, end = arr.length-1; start < end; start++,end--) {
               int temp = arr[start];
               arr[start] = arr[end];
               arr[end] =temp;
        }



    }
}

综合案例-评委打分

public class ArraysDemo6 {
    public static void main(String[] args) {
//        需求:
//        在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分
//        选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值
//        1.定义动态数组
        int[]arr = new int[6];

//        2.键盘录入数据
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请评委打分");
            Scanner sc =new Scanner(System.in);
            arr[i] = sc.nextInt();
        }
//        求出总成绩
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum+=arr[i];
        }
        int max= getMax(arr);
        int min= getMin(arr);
//        求出去掉一个最高分和一个最低分后 的4个评委平均值
        int average = (sum-max-max)/4;

        System.out.println("平均值"+average);
    }
//    定义方法获取最大值
    public static  int getMax(int []arr){
          int max= 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]>max){
                max =arr[i];
            }
        }

        return max;
    }
//    定义方法获取最小值
    public static int getMin(int []arr){
        int min = arr.length-1;
        for (int i = 0; i < arr.length; i++) {
            if (min<arr[i]){
                min= arr[i];
            }
        }
        return min;
    }
}

  1. 数组常见的两个问题

  1. 数组索引越界异常

  2. 数组索引越界异常: IndexOutOfBoundsException 访问了数组中不存在的索引

  3.  public class IndexOutOfBoundsExceptionDemo {
         /*
             数组索引越界异常: IndexOutOfBoundsException 访问了数组中不存在的索引
          */
         public static void main(String[] args) {
             int[] arr = {11, 22, 33};
             
             System.out.println(arr[10]);
    
             for(int i = 0; i <= arr.length; i++){
                 // i = 0 1 2 3
                 System.out.println(arr[i]);
             }
         }
     }
    

  4. 空指针异常

  5. 空指针异常: NullPointerException 当引用数据类型变量被赋值为 null 之后, 地址的指向被切断, 还继续访问堆内存数据, 就会引发空指针异常

  6.  public class NullPointerExceptionDemo {
         /*
             空指针异常: NullPointerException
             当引用数据类型变量被赋值为 null 之后, 地址的指向被切断, 还继续访问堆内存数据, 就会引发空指针异常
          */
         public static void main(String[] args) {
             int[] arr = {11, 22, 33};
    
             arr = null;
             System.out.println(arr[0]);
         }
     }