day04 数组

目录

1.数组

1.1 数组介绍

1.2 数组的定义格式

1.2.1 第一种格式

1.2.2 第二种格式

1.3 数组的动态初始化

1.4 内存分配

1.4.1 内存概述

1.4.2 java中的内存分配

1.5 Java内存分配

1.5.1 一个数组内存图

1.5.2 两个数组内存图

1.5.3 多个数组指向相同内存图

1.5.4 数组的静态初始化

1.6 数组操作的两个常见问题

1.6.1 索引越界异常

1.6.2 空指针异常

1.7 数组基本查找

1.8 案例


1.数组

1.1 数组介绍

​数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。

1.2 数组的定义格式

1.2.1 第一种格式

数据类型[ ] 数组名

示例

int[] arr;        
double[] arr;      
char[] arr;

1.2.2 第二种格式

数据类型 数组名[ ]

示例

int arr[];
double arr[];
char arr[];

1.3 数组的动态初始化

​ 数组动态初始化就是只给定数组的长度,由系统给出默认初始化值

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

int[] arr = new int[3];

1.4 内存分配

1.4.1 内存概述

​ 内存是计算机中的重要原件,临时存储区域,作用是运行程序。

​ 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。

​ 必须放进内存中才能运行,运行完毕后会清空内存。

​ Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

1.4.2 java中的内存分配

栈内存和堆内存

区域名称作用
寄存器给CPU使用,和我们开发无关。
本地方法栈JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区存储可以运行的class文件。
堆内存存储对象或者数组,new来创建的,都存储在堆内存。
方法栈方法运行时使用的内存,比如main方法运行,进入方法栈中执行。

1.5 Java内存分配

1.5.1 一个数组内存图

在这里插入图片描述

1.5.2 两个数组内存图

在这里插入图片描述

1.5.3 多个数组指向相同内存图

在这里插入图片描述

1.5.4 数组的静态初始化

完整版

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

简化版

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

1.6 数组操作的两个常见问题

1.6.1 索引越界异常

代码示例

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];
        System.out.println(arr[3]);
    }
}

错误原因

数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。

程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

解决方案

将错误的索引修改为正确的索引范围

1.6.2 空指针异常

代码示例

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];

        //把null赋值给数组
        arr = null;
        System.out.println(arr[0]);
    }
}

arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

解决方案

给数组一个真正的堆内存空间引用

1.7 数组基本查找

需求:
已知一个数组 arr = {19, 28, 37, 46, 50}; 键盘录入一个数据,查找该数据在数组中的索引,并在控
制台输出找到的索引值

代码示例

public static void main(String[] args) {
        // 1.定义一个数组,用静态初始化完成数组元素的初始化
        int[] arr = {19, 28, 37, 46, 50};
        // 2.键盘录入要查找的数据,用一个变量接收
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要查找的元素:");
        int num = sc.nextInt();
        // 3.定义一个索引变量,初始值为-1
        // 假设要查找的数据, 在数组中就是不存在的
        int index = -1;
        // 4.遍历数组,获取到数组中的每一个元素
        for (int i = 0; i < arr.length; i++) {
            // 5.拿键盘录入的数据和数组中的每一个元素进行比较,如果值相同,就把该值对应的索引赋值给索引变量,并结束循环
            if(num == arr[i]){
                // 如果值相同,就把该值对应的索引赋值给索引变量,并结束循环
                index = i;
                break;
            }
        }
        //  6.输出索引变量
        System.out.println(index);
    }
}

1.8 案例

案例_求数组元素最值
案例_求数组元素和
案例_数组元素的基本查找
案例_评委打分案例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值