数组#
在上一节中,我们学习了如何处理单个变量。但如果你需要存储 100 个学生的分数,声明 100 个变量显然是不现实的。这时我们就需要用到数组。
数组(Array) 是一种数据结构,它可以存储多个类型相同的数据,并可以通过索引(下标)来访问它们。
数组的声明与初始化#
在 Java 中,数组的声明有两种常见方式:
方式 A:先声明并指定长度#
这种方式会创建一个“空架子”,Java 会为基本类型填充默认值(如 int 默认为 0)。
void main() {
// 声明一个可以存放 5 个整数的数组
int[] scores = new int[5];
// 为数组元素赋值(注意:索引从 0 开始)
scores[0] = 95;
scores[1] = 88;
}
方式 B:声明并直接赋值(静态初始化)#
如果你已经知道具体的数据,可以使用大括号:
void main() {
String[] names = {"Alice", "Bob", "Charlie"};
}
访问与修改数组元素#
数组中的每个位置都有一个编号,称为索引 (Index)。
- 起始编号:从
0开始。 - 最大编号:数组长度减 1。
void main() {
int[] numbers = {10, 20, 30, 40};
// 获取元素
IO.println(numbers[0]); // 输出 10
// 修改元素
numbers[1] = 25;
IO.println(numbers[1]); // 输出 25
}
数组的长度与越界#
每个数组都有一个内置属性 length,用来获取数组包含多少个元素。
void main() {
int[] arr = {1, 2, 3};
IO.println("数组长度是: " + arr.length);
// 危险操作:访问 arr[3] 会导致程序崩溃(报错:ArrayIndexOutOfBoundsException)
// 因为索引只有 0, 1, 2
}
遍历数组#
要处理数组中的所有数据,通常配合循环使用。
使用标准 for 循环#
当你需要知道当前元素的索引时使用:
void main() {
double[] prices = {1.99, 2.5, 3.99};
for (int i = 0; i < prices.length; i++) {
IO.println("第 " + i + " 件商品价格: " + prices[i]);
}
}
使用增强型 for 循环 (for-each)#
当你只需要获取值,不关心索引时使用:
void main() {
int[] nums = {10, 20, 30};
for (int n : nums) {
IO.println("数值: " + n);
}
}
多维数组(了解即可)#
数组的元素也可以是另一个数组。最常见的是二维数组(类似表格)。
void main() {
// 2行3列的数组
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
IO.println(matrix[0][1]); // 输出第一行第二列的值:2
}
动手练习:寻找最大值#
编写一个程序,找出数组中最大的数字:
void main() {
int[] data = {12, 45, 7, 34, 99, 23};
int max = data[0]; // 假设第一个数是最大的
for (int i = 1; i < data.length; i++) {
if (data[i] > max) {
max = data[i]; // 发现更大的,更新 max
}
}
IO.println("数组中的最大值是: " + max);
}
本节小结#
我们了解了数组的概念,学习了数组的声明、初始化、访问与修改,学习了使用for循环遍历数组,了解了多维数组。我们还通过“寻找最大值”的程序巩固了数组的用法。
数组是固定长度的容器。 虽然它很简单高效,但在实际开发中,我们往往需要能自动扩容的集合。不过在那之前,我们需要先学习如何将这些逻辑封装起来。