栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Day-04Code-数组

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day-04Code-数组

Day-04-数组 Java-数组的概念

数组就是用来存储一批同种类型数据的内存区域(可以理解成容器)。

数组适合做一批同种类型数据的存储。


Java-数组的定义

静态初始化数组

​ 数组的访问

​ 数组的几个注意事项

动态初始化数组

​ 动态初始化数组的元素默认值


Java-数组的定义-静态初始化数组

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

静态初始化数组的格式:

// 完整写法
double [] scores = new double[] {75.5,65.5,90.0,100};
int [] ages = new int[] {26,22,23,25};
// 简化写法    
double [] scores = {75.5,65.5,90.0,100};
int [] ages = new int[] {26,22,23,25};

数组变量名中存储的是数组在内存中的地址,数组是引用类型


Java-数组的定义-静态初始化数组-数组的访问

数组的访问:数组名称[ 索引 ]

// 取值
System.out.println(scores[0]);
// 赋值
scores[2] = 65.5;
System.out.println(scores[2]);

数组的长度属性:length

System.out.println(scores.length);

数组的最大索引怎么表示:数组名.length -1 //前提元素个数大于0

System.out.println(ages.length - 1);

Java-数组的定义-静态初始化数组-数组的几个注意事项

"数据类型[ ] 数组名" 也可以写成 "数据类型 数组名 [ ]"

// 1. "数据类型[ ] 数组名" 也可以写成 "数据类型 数组名 [ ]"
int [] ages = {26,38,76};
int ages1 [] = {36,35,34};

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

// 2. 什么类型的数组存放什么类型的数据,否则报错
String [] names = {"张三" , "李四" , 23}; // 错误

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

// 3. 数组一旦定义出来,程序执行的过程中,长度,类型就固定了
int [] ages2 = {11,22,33};
System.out.println(ages2[3]); // 报错 长度固定是3了不能访问第4个元素

Java-数组的定义-动态初始化数组

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

数组的动态初始化格式:

// 数据类型[]  数组名 = new 数据类型[长度];
double [] scores = new double[3];
// 后赋值
scores[0] = 15;
System.out.println(scores[0]);

两种数组定义时的特点和场景有什么区别:

​ 当前已经知道存入的元素值,用静态初始化。

​ 当前还不清楚要存入哪些数据,用动态初始化。


Java-数组的定义-动态初始化数组-动态初始化数组的元素默认值

元素的默认值规则:

数据类型明细默认值
基本类型byte、short、char、int、long0
基本类型float、double0.0
基本类型booleanfalse
引用类型类、接口、数组、Stringnull
// 1. 整型数组的元素默认值都是0
int [] arr = new int[10];
System.out.println(arr[0]); // 0
System.out.println(arr[3]); // 0

// 2. 字符数组的元素默认值也是0
char[] chars = new char[100];
System.out.println((int)chars[8]); // 0
System.out.println((int)chars[10]); // 0

// 3. 浮点型数组的元素默认值是0.0
double[] scores = new double[95];
System.out.println(scores[0]); // 0.0
System.out.println(scores[15]);  // 0.0

// 4. 布尔类型的数组
boolean[] booleans = new boolean[100];
System.out.println(booleans[0]); // false
System.out.println(booleans[99]); // false

// 5. 引用类型的数组
String[] names = new String[90];
System.out.println(names[0]);  // null
System.out.println(names[89]); // null 

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

    动态初始化:只指定数组长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景静态初始化:开始就存入元素值,适合一开始就能确定元素值的业务场景两种格式的写法是独立的,不可以混用

Java-数组的遍历

数组遍历介绍:

    遍历:就是一个一个数据的访问搜索、数据统计等等都需要用到遍历
int [] arr = {26,27,28,29,30};
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

Java-数组的案例

    数组遍历-求和:需求:某部门5名员工的销售额分别是:15、28、19、32、100,请计算出他们部门的总销售额。

    int [] money = {15,18,19,32,100};
    int sum = 0;
    for (int i = 0; i < money.length; i++) {
        sum += money[i];
    }
    System.out.println("数组的元素和是:" + sum);
    

    数组求最值:

    // 1. 定义一个静态初始化的数组,存储一批颜值
    int[] faceScore = {15,9000,10000,20000,9500,-5};
    
    // 2. 定义一个变量用于存储最大值元素,建议使用第一个元素作为参照
    int max = faceScore[0];
    
    // 3. 遍历数组的每个元素,依次与最大值变量的数据比较,若较大,则替换
    for (int i = 1; i < faceScore.length; i++) {
        if (faceScore[i] > max){
            max = faceScore[i];
        }
    }
    
    // 4. 输出最大值变量存储数据即可
    System.out.println("数组的最大值是:" + max);
    

    猜数字游戏:需求:5个 1-20之间的随机数,让用户猜,猜中要提示猜中,还要输出该数据在数组中第一次出现的索引,并打印数组内容出来

    // 1. 定义一个动态初始化的数组存储5个随机的1-20之间的数据
    int[] data = new int[5];
    
    // 2. 动态生产5个1-20之间的随机数并存入到数组中去
    Random r = new Random();
    for (int i = 0; i < data.length ; i++) {
        data [i] = r.nextInt(20) +1;
    }
    
    // 3. 使用死循环让用户进行猜测
    Scanner sc = new Scanner(System.in);
    OUT:
    while (true){
        System.out.println("请您输入一个1-20之间的整数进行猜测:" );
        int guessData = sc.nextInt();
    
        // 4. 遍历数组中的每个数据,看是否有数据与猜测的数据相同,相同代表猜中了,给出提升
        for (int i = 0; i < data.length; i++) {
            if (data[i] == guessData){
                System.out.println("您已猜中了该数据,运气不错,您猜中得到数据索引是:" +i);
                break OUT; // 结束了整个死循环,代表游戏结束了
            }
        }
        System.out.println("当前猜测的数据在数组中不存在,请重新猜测");
    }
    // 5.输出数组的全部元素,让用户看到自己确实猜中了某个数据
    for (int i = 0; i < data.length; i++) {
        System.out.print(data[i] + "t");
    }
    

    随机排名:键盘录入一组工号,最终要随机输出一组出来作为排名

    // 1. 动态初始化一个数组,存储5个工号
    int[] codes = new int[5];
    
    // 2. 定义一个循环,循环5次,依次录入一个工号存入对应的位置
    Scanner sc = new Scanner(System.in);
    for (int i = 0; i < codes.length; i++) {
        // 正式录入工号
        System.out.println("请您输入第" + (i +1) + "个员工的工号:");
        int code = sc.nextInt();
        // 存入到数组中去
        codes[i] = code;
    }12
    
    // 3. 遍历数组中的每个元素,然后随机一个索引出来,让该元素与随机索引位置处的元素值进行交换
    Random r = new Random();
    for (int i = 0; i < codes.length; i++) {
        // 当前遍历的元素值:codes[i]
        // 随机一个索引位置出来
        int index = r.nextInt(codes.length);
    
        // 定义一个临时变量存储index位置处的值
        int temp = codes[index];
        codes[index] = codes[i];
        codes[i] = temp;
    }
    
    // 4. 遍历数组元素输出就是随机排名的结果
    for (int i = 0; i < codes.length; i++) {
        System.out.print(codes[i] + "t");
    }
    

    数组的排序:就是对数组中的元素,进行升序(由小到大)或者降序(由大到小)的操作。

    数组排序的技术:冒泡排序、选择排序、快速排序、插入排序

    数组搜索相关的技术:二分搜索、分块查找、哈希表查找

    // 1. 定义一个数组,存储一些数据
    int[] arr = {6,5,9,3};
    
    // 2. 定义一个循环控制比较的轮数
    for (int i = 0; i < arr.length -1 ; i++) {
    // 定义一个循环控制每轮比较的次数,占位
    for (int j = 0; j < arr.length -i -1; j++) {
        // 判断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");
    }
    

Java-数组使用常见问题

如果访问的元素位置超过最大索引,执行时会出现Array Index Out Of Bounds Exception(数组索引越界异常)

如果数组变量中没有存储数组的地址,而是null, 在访问数组信息时会出现Null Pointer Exception(空指针异常)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/724222.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号