Java数组深入解析:定义、操作、常见问题与高频练习

一、数组的定义

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];
}
相关推荐
小庞在加油5 分钟前
Apollo源码架构解析---附C++代码设计示例
开发语言·c++·架构·自动驾驶·apollo
yngsqq27 分钟前
netdxf—— CAD c#二次开发之(netDxf 处理 DXF 文件)
java·前端·c#
A了LONE35 分钟前
h5的底部导航栏模板
java·前端·javascript
专注VB编程开发20年37 分钟前
各版本操作系统对.NET支持情况(250707更新)
开发语言·前端·ide·vscode·.net
我喜欢就喜欢1 小时前
RapidFuzz-CPP:高效字符串相似度计算的C++利器
开发语言·c++
莫彩1 小时前
【Modern C++ Part7】_创建对象时使用()和{}的区别
开发语言·c++
经典19921 小时前
spring boot 详解以及原理
java·spring boot·后端
星光54221 小时前
飞算JavaAI:给Java开发装上“智能引擎”的超级助手
java·开发语言
June bug1 小时前
【Python基础】变量、运算与内存管理全解析
开发语言·python·职场和发展·测试
醇醛酸醚酮酯1 小时前
Qt项目锻炼——TODO(五)
开发语言·qt