Java-数组

216 阅读3分钟

数组的特点

数组的长度一旦确定就不能修改 数组元素是连续存储的,即数组需要在内存中开辟一整块连续的存储空间

一维数组初始化

(1)静态初始化:适用于一组数据是“已知”
数组名 = new 元素的类型[]{元素1, 元素2,...};
当声明和静态初始化是在一个语句完成的时,=右边的new 元素的数据类型[]可以省略,直接写{}就可以。
元素的数据类型[] 数组名 = {元素1, 元素2,...};

(2)动态初始化:适用于一组数据是“未知”,或需要通过计算得到,或者通过键盘输入得到
数组名 = new 元素的数据类型[长度];

初始化的目的:
(1)数组元素个数
(2)数组的元素值
静态初始化时,值直接确定
动态初始化时,值是默认值
整数类型:0
小数类型:0.0
boolean类型:false
char类型:\u0000,编码值为0的字符
引用数据类型,例如:String:null

public static void main(String[] args) {
     //方式一
     int[] scores;
     scores = new int[]{89,96,100,75,88,99};
     //方式二
     int[] scores = new int[]{89,96,100,75,88,99};
     //方式三
     int[] scores = {89,96,100,75,88,99};
}

image.png

image.png

二维数组

当同样数据类型的数据,有多组需要一起存储,一起处理时,就需要用二维数组。

1、二维数组的声明 元素的数据类型[][] 数组名; //推荐

元素的数据类型 数组名[][];
元素的数据类型[] 数组名[];

2、二维数组的初始化
(1)静态初始化
数组名 = new 元素的数据类型[][] {{第一行/组的元素列表}, {第二行/第二组的元素列表},...};
(2)动态初始化
A:规则的矩阵,每一行的列数相同的
数组名 = new 元素的数据类型[总行数][每一行的总列数];
B:不规则的二维表(每一行的列数不相同,即每一行有长有短)
①先确定行数
//每一行的列数暂不指定,未定,待定
数组名 = new 元素的数据类型[总行数][];
②再依次确定每一行的列数

3、使用
(1)如何获取总行数: 二维数组名.length
(2)如何获取一行: 二维数组名[行下标]
行下标的范围[0, 二维数组名.length-1]
(3)获取一行的元素个数:二维数组名[行下标].length ==> 二维数组名[行下标]本质上是一个一维数组
(4)获取某一行某个元素: 二维数组名[行下标][列下标]
列下标的范围[0, 二维数组名[行下标].length-1]

//静态初始化
int[][] grades = {
        {89,78,86,96,99},
        {89,87,56,99},
        {80,84,56,99,100,12}
};

//动态初始化
int[][] arr = new int[10][6];

//不规则
int[][] arr = new int[5][];//二维数组一共有5行,但是每一行几个元素未定
//arr[i]代表一行,一行又是一个一维数组

/*
发生了空指针异常NullPointerException,
当发生空指针异常时,先找.前面的东西,看它是否为null,
这里arr[i]是null,所以会发生空指针异常

如果要解决空指针异常,必须给arr[i]赋值。
因为arr[i]是代表一行,代表一个一维数组,所以必须给他new一个一维数组
arr[i] = new int[下标为i行的长度,元素个数];