Java数组

数组

定义: 用来存储一批同种类型数据的内存区域(理解为容器)

第一章:数组的定义

  • 静态初始化数组

    • 定义数组的时候直接给数组赋值

    • 格式

      // 完整格式
      数据类型[] 数组名 = new 数据类型[] {元素1,元素2,元素3...};
      // eg:
      double[] scores = new double[];{89.0,99.5,59.5,34.89};
      int [] ages = new int[]{12,24,36};
      // 简写
      数据类型[] 变量名 ={,,,,}
      int[] score ={23,56,76,45};
      
    • 数组名称[索引](数组的访问)索引地址从0开始

      //赋值 arr[2]=36(原)
      赋值:数组名称[索引] = 数据
      arr[2] = 100;
      System.out.println(arr[2]); // 100
      
    • 数组的最大索引表示?

      • 数组名.length - 1// 元素个数大于0
    • 注意事项:

      • 数据类型[] 数组名 == 数据类型 数组名;
  • 动态初始化数组:只确定元素的类型和数组的长度,之后在存入具体数据。

    • 语法规则

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

      int [ ] arr = new int[3];

      //后赋值

      arr[0] = 10;

      System.out.print(arr[0]);//10

  • 已知存入元素值,用静态初始化。相反使用动态初始化

  • 引用类型
    类,接口,数组,Stringnull
  • 数组元素求最大值

    • 案例:有一组数:15, 9000 ,10000 ,20000, 9500, -5;

      // 分析:使用数组定义
      int[]faceScores = {15, 9000 ,10000 ,20000, 9500, -5};
      // 定义遍历用于记录最值,建议默认存储第一个元素值作为参照。
      int max = faceScores[0];
      遍历数组的每个元素,依次与最大值变量的数据比较,若较大,则替换
      for (int i = 0; i < faceScore.length;i++) {
      if (faceScore[i] > max) {
        max = faceScore[i];
      }
      }
      

第二章:遍历数组

  1. 定义

    • 一个一个数据的访问。搜索、数据统计需要用到遍历。

    • 例子:

      int [] ages = {20,30,40,50};

      for(int i = 0; i<ages.length; i++) {

      System.out.println(ages[i]);

      }

第三章: 数组案例

  • 猜数字游戏

    // 需求
    游戏后台随机生成1-20 之间的5个数
     为猜中提示:“未命中”继续猜测
     猜中提示:“运气不错猜中了”,并输出该数据
     // 核心代码
     // 定义动态初始化数组5个随机的1~20之间的数据
     int[] data = new int[5];
    // 动态的生成5个1-20之间的随机数并存入数组中
    Random r = new Random();
    for (int i =0;i<data.length;i++) {
        // i = 0 1 2 3 4 
        data[i] = r.nextInt(bound:20) +  1;
    }
    // 使用死循环让用户猜测
    Scanner sc = new Scanner(System.in);
    OUT:
    while (true) {
        System.out.println("请您输入1~20之间的整数猜测")
            int guessData = sc.nextInt();
        // 遍历数组中的每个数据,看是否与猜测的数据相同,相同代表猜中了,给出提示
    //    System.out.print("[")
        for(int i = 0; i<data.length; i++) {
            if(data[i] == guessData){
                System.out.println("您已经猜中了该数据,运气不错!您猜中的数据索引是:"+i);
                	break OUT;//结束了整个死循环,代表游戏结束了!
            }
        }
        System.out.println("当前猜测的数据在数组中不存在,请重新猜测!")
    }
    // 输出数组的全部元素,让用户看到猜测的数字
    for(int i = 0; i<data.length; i++) {
        System.out.print(data[i]+"\t");
    }
    
    
  • 随机排名

    需求:某公司开发部 5名开发人员,要进行项目进展汇报现采取随机排名后进行汇报,依次录入5名员工的工号,随后展示出一组随机的排名顺序

    22 33 35 13 88 ==》 13 35 88 33 22

    分析:使用数组录入5名员工的工号进行存储,再依次遍历数组的每个元素,随机一个索引数据,当前元素与该索引处元素进行交换

    //核心代码
    1、动态初始化数组存储5个数据
    int[] codes = new int[5];
    
    // 定义一个循环,循环5次,依次录入一个工号存入对应的位置
    Scanner sc = new Scanner(System.in);
    for ( int i = 0; i<codes.length;i++) {
        // 录入工号
        System.out.println("请您输入第"+(i+1+"个员工的工号")int code = sc.nextlnt();
        //存入数组中
        codes[i] = code;
    }
    // 遍历数组中的每个元素,然后随机一个索引,该元素与速记索引位置处的元素值进行交换
    Random r = new Random();
    for (int i = 0; i< codes.length;i++) {
        // 当前遍历的元素值:codes[i]
        // 随机索引位置codes[index]
        int index = r.nextlnt(codes.length);
        //定义临时变量
        int temp = codes[index];
        codes[index] =codes[i];
        codes[i] = temp;
        //遍历数组元素输出排名结果
        for(int i = 0; i< codes.length;i++){
            System.out.print(codes[i]+"\t");
        }
    }
    
  • 数组排序

    • 冒泡排序 选择排序 快速排序 插入排序 堆排序
    • 查找:二分搜索 分块查找 哈希表查找
    // 冒泡排序
     int [] arr = {5,2,3,1};
    //                 0 1 2 3
    // 定义一个循环控制笔记的论数
    for (int i = 1; i<= arr.length -1 ; i++) {// 若 i= 0 开始 j 需要少循环一次即arr.length-i -1
        //   i== 1 比较的次数 3 j = 0 1 2
        // i == 2                    2 j = 0 1
        // 定义循环控制每轮比较的次数和占位
        for (int j = 0; j < arr.length -i ; j++) {
            // 判断当前位置的元素值是否大于后一个文字 若较大则交换
            if(arr[j] > arr[j+1] ) {
                int temp = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    // 遍历数组内容输出
    for (int i = 0 ; i< arr.length; i++) {
        System.out.print(arr[i] + "\t")
    }
    

第四章:数组内存图,Debug工具

  • 数组内存图
    在这里插入图片描述
    在这里插入图片描述

  • // 目标:理解2个数组变量指向一个数组对象
    int[] arr1= {11,22,33};
    // 数组arr1变量赋值给int类型的数组变量arr2 
    int [] arr2 = arr1;
    // 输出arr1 和arr2
    arr[1] = 99;
    System.out.print(arr[1]);
    System.out.print(arr2[0]);
    System.out.print(ar2r[1]);
    System.out.print(arr2[2]);
    
  • 常见问题

    • 若访问的元素位置超过最大索引,执行会出现ArrayIndexOut(数据索引越界异常)

    • 若数组变量中没有存储数组的地址,而是null 访问数组会出现NullPointerException(空指针异常)

      arr = null;
      System.out.print(arr);// null
      
  • IDEA Debug工具的使用

    • 食用方法:温水送服

      在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值