跳转至

数组#

在上一节中,我们学习了如何处理单个变量。但如果你需要存储 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循环遍历数组,了解了多维数组。我们还通过“寻找最大值”的程序巩固了数组的用法。

数组是固定长度的容器。 虽然它很简单高效,但在实际开发中,我们往往需要能自动扩容的集合。不过在那之前,我们需要先学习如何将这些逻辑封装起来。