一、数组的定义
1. 什么是数组
数组是一个容器,用来存储多个相同类型的数据。它属于引用数据类型,可以存储基本数据类型(如int、char)或者引用数据类型(如String、对象)。
2. 数组的定义方式
a. 动态初始化
动态初始化时,只有数组的长度被定义,数组元素的值在之后可以进行赋值。
java
数据类型[] 数组名 = new 数据类型[长度];
数据类型 数组名[] = new 数据类型[长度];
示例:
java
// 声明数组
int[] arr; // 推荐的声明方式
// 或者
int arr[];
// 创建数组arr = new int[5]; // 创建一个长度为5的整数数组
// 声明并初始化数组
int[] arr2 = {1, 2, 3, 4, 5, 6}; // 创建并初始化数组
b. 静态初始化
静态初始化时,数组在创建时就已经有了具体的元素值。
java
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, ...};
不推荐使用这种方式,因为它显得冗长。
c. 简化的静态初始化
简化静态初始化可以在声明时直接指定数组元素,代码更简洁。
java
数据类型[] 数组名 = {元素1, 元素2, ...};
示例:
java
int[] arr = {1, 2, 3, 4, 5}; // 创建一个包含5个整数的数组
String[] names = {"Alice", "Bob", "Charlie"};
二、数组操作
1. 获取数组的长度
数组的长度可以通过 .length 属性来获取。
java
int[] arr = {100, 200, 300};
int length = arr.length; // 获取数组的长度,值为3
注意,length 后面没有小括号,因为它不是方法,而是数组的一个属性。
2. 数组的索引
数组元素是通过索引来访问的,索引从 0 开始,最大索引为 length - 1。
java
int[] arr = {100, 200, 300};
System.out.println(arr[0]); // 输出 100
System.out.println(arr[1]); // 输出 200
System.out.println(arr[arr.length-1]); // 输出 30
3. 存储元素
使用索引将元素存入数组:
java
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
4. 获取数组元素
通过索引获取数组中的元素:
java
int value = arr[0]; // 获取索引0位置的元素
5. 遍历数组
可以使用 for 循环来遍历数组中的元素:
java
// 普通for循环
int[] arr = {10, 20, 30, 40, 50};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); // 打印数组中的每个元素
}
// 增强型for循环
for (int num : arr) { // 声明一个整数类型的变量 num,用来存储数组中的每个元素
System.out.println(num); // 输出每个元素
}
6. 数组的复制
将一个数组的元素复制到另一个数组中:
java
int[] arr1 = {1, 2, 3};
int[] arr2 = new int[arr1.length];
for (int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
三、常见问题
1. 数组索引越界异常 (ArrayIndexOutOfBoundsException)
当你访问的索引超出了数组的有效范围时,会抛出该异常。数组索引必须在 0 到 length - 1 之间。
示例:
java
int[] arr = {0,1, 2, 3};
System.out.println(arr[4]); // 会抛出 ArrayIndexOutOfBoundsException
2. 空指针异常 (NullPointerException)
如果你尝试访问一个值为 null 的数组或对象,就会发生空指针异常。
示例:
java
int[] arr = null;
System.out.println(arr.length); // 会抛出 NullPointerException
四、数组常用练习
1. 求数组最大值
通过遍历数组,找出其中的最大值。
java
int[] arr = {10, 4, 7, 1, 9};
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
System.out.println("最大值是:" + max);
2. 统计符合条件的数组元素
假设需要统计数组中既能被3整除又能被5整除的元素个数,但不能被7整除。
java
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 3 == 0 && arr[i] % 5 == 0 && arr[i] % 7 != 0) {
count++;
}
}
System.out.println("符合条件的元素个数是:" + count);
3. 通过键盘输入并输出数组
java
Scanner sc = new Scanner(System.in);
String[] arr = new String[3];
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第" + (i + 1) + "个名字:");
arr[i] = sc.next();
}
for (String name : arr) {
System.out.println(name);
}
4. 数组扩容
如果数组的大小不够,可以创建一个新的数组,并将旧数组的元素复制到新数组中。
java
int[] oldArr = {1, 2, 3, 4, 5};
int[] newArr = new int[10];
for (int i = 0; i < oldArr.length; i++) {
newArr[i] = oldArr[i];
}
oldArr = newArr; // 让旧数组指向新的扩容数组
5. 数组合并
合并两个数组:
java
int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};
int[] newArr = new int[arr1.length + arr2.length];
for (int i = 0; i < arr1.length; i++) {
newArr[i] = arr1[i];
}
for (int i = 0; i < arr2.length; i++) {
newArr[arr1.length + i] = arr2[i];
}