数组

数组

​ 数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
​ 数组既可以存储基本数据类型,也可以存储引用数据类型。

数组格式

​ 格式1: 数据类型[] 数组名;
​ 格式2: 数据类型 数组名[];

举例:
int[] a;定义了一个int类型的数组a;
int a[];定义了一个int类型的a数组;
一般使用第一种定义方式。

数组初始化

​ Java中的数组必须先初始化,然后才能使用。
​ 初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

初始化的分类
  • 动态初始化:只指定长度,由系统给出初始化值。
  • 静态初始化:给出初始化值,由系统决定长度。
动态初始化

​ 格式:数据类型[] 数组名 = new 数据类型[数组长度];

​ 数组长度即数组中元素的个数。

​ 举例:int[] arr = new int[3];

​ 定义了一个int类型的数组arr,这个数组可以存放3个int类型的值。

public class shuzu {
    public static void main(String[] args) {
        int[] arr = new int[3];//动态初始化
        System.out.println(arr);//输出数组地址值
        arr[0] = 100;
        arr[1] = 200;
        arr[2] = 300;
        //输出数组中的元素
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}
数组的内存图解1一个数组

Ddfnqs.png

数组的内存图解2二个数组

在这里插入图片描述

数组的内存图解3三个引用2个数组

Ddffot.png

静态初始化

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

​ 举例:int[] arr = new int[]{1,2,3};

​ 简化格式:数据类型[] 数组名 = {元素1,元素2,…};

​ 举例:int[] arr = {1,2,3};

数组的静态初始化图示

数组的操作

获取数组长度
public class Len {
    public static void main(String[] args) {
        int[] arr=new int[10];
        int len=arr.length;
        System.out.println(len);
    }
}
遍历
public class bianli {
    public static void main(String[] args) {
        int[] arr={60,70,80,90,100};
        //遍历
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
        System.out.println("===============");
        //反向遍历
        for(int i=arr.length-1;i>=0;i--){
            System.out.println(arr[i]);
        }
    }
}
获取最值
public class Max {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30, 40, 1,50}; //{50,40,30,20,10}
        int max = getMax(arr);
        System.out.println(max);
    }

    public static int getMax(int[] arr){
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }
}

反转
public class fanzhuan {
    public static void main(String[] args) {
        int[] arr={10,20,30,40,50};
        for (int i = 0; i < arr.length/2; i++) {
            int t = arr[i];
            arr[i]= arr[arr.length - 1-i];
            arr[arr.length - 1 - i]=t;
        }

        System.out.println("========================");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);//{50,40,30,20,10}
        }
    }
}
查表法
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        String[] arr={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};
        Scanner sc = new Scanner(System.in);
        System.out.println("输入数字 0---6");
        int num = sc.nextInt();
        //根据索引找元素
        String element = getElement(num, arr);
        System.out.println(element);
    }
    public static String getElement(int index, String[] arr){
        if(index>=0&&index<arr.length){
            return arr[index];
        }else{
            return "你输入的索引不合理";
        }
    }
}
基本查找
import java.util.Scanner;
public class MyTest2 {
    public static void main(String[] args) {
        //根据元素找索引
        String[] arr = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"};
        System.out.println("请输入星期");
        Scanner scanner = new Scanner(System.in);
        String ele = scanner.nextLine();
        int index = getIndexByEle(ele, arr);
        System.out.println(index);

    }
    public static int getIndexByEle(String ele, String[] arr){
        int index=-1;
        for (int i = 0; i < arr.length; i++) {
            //如果你要比较两个字符串字面上的内容是否相同 用方法来比较
            if(ele.equals(arr[i])){
            	return i;
            }
        }
        return -1; //没有找到就返回-1
    }
}

数组操作常见问题

越界

​ ArrayIndexOutOfBoundsException:数组索引越界异常
​ 原因:你访问了不存在的索引。

空指针

​ NullPointerException:空指针异常
​ 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

}
return -1; //没有找到就返回-1
}
}


## 数组操作常见问题

#### 越界

​	ArrayIndexOutOfBoundsException:数组索引越界异常
​	原因:你访问了不存在的索引。

#### 空指针

​	NullPointerException:空指针异常
​	原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值