练习——找出一个数组的最大数并放在最后一个元素的下一位

练习——找出一个数组的最大数并放在最后一个元素的下一位

需求

  • 找出数组中的最大值
  • 将数组”扩容”一位,把最大值放入新增的最后一位
  • 遍历输出结果

示例代码

public static void main(String[] args) {
    int[] a = {1, 24, 56, 78, 76, 342, 65, 4};

    // 1. 找出最大值
    int max = a[0];
    for (int i = 1; i < a.length; i++) {
        if (a[i] > max) {
            max = a[i];
        }
    }

    // 2. 数组"扩容"一位,将最大值放入末尾
    a = Arrays.copyOf(a, a.length + 1);
    a[a.length - 1] = max;

    // 3. 遍历输出
    for (int i = 0; i < a.length; i++) {
        System.out.println(a[i]);
    }
}Code language: JavaScript (javascript)

输出结果:

1
24
56
78
76
342
65
4
342

关键注意点

1. a 的前后区别

阶段a 指向的数组a.length
初始{1, 24, 56, 78, 76, 342, 65, 4}8
Arrays.copyOf 之后{1, 24, 56, 78, 76, 342, 65, 4, 0} → 再赋值 max9

执行 a = Arrays.copyOf(a, a.length + 1) 后,a 指向了一个全新的数组,原数组被丢弃。a.length 从 8 变为 9。

2. 赋值位置

a[a.length - 1] = max; // 即 a[8] = 342Code language: JavaScript (javascript)

因为新数组长度为 9,最后一个下标是 8,所以最大值放在 a[8]。

3. 遍历输出

for (int i = 0; i < a.length; i++) {
    System.out.println(a[i]);
}

注意这里从 i = 0 开始遍历,输出所有元素(包括原来的和新增的最大值)。

逻辑拆解

步骤说明
找最大值遍历原数组,用 max 记录最大值 342
扩容Arrays.copyOf(a, 9) 创建新数组,原 8 个元素复制过来,第 9 位默认 0
放最大值a[8] = 342,新数组变为 9 个元素
输出从下标 0 到 8 依次输出

注意:a = Arrays.copyOf(...) 之后,a 已经指向新数组,后续所有对 a 的操作都是针对新数组。原数组因为没有引用指向它,会被垃圾回收。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注