Skip to content

数组扩容与缩减


动态扩容

思路分析

(1)创建新数组

(2)for 循环遍历旧数组,完成数组拷贝

(3)接收添加元素,遍历新数组,完成添加

注意:多次录入难免在输入缓冲区遗留回车,需要即时清除,避免因为误读缓冲区中的回车导致程序崩溃

java
public class Main {
    public static void main(String[] args) {
        // 定义原数组
        int[] a = {1, 2, 3};
        // 创建扫描器
        Scanner scanner = new Scanner(System.in);
        // 接收扩容个数
        System.out.print("请输入需要添加的元素个数:");
        int num = scanner.nextInt();
        // 清空输入缓冲区(回车)
        scanner.nextLine();
        // 创建新数组
        int[] b = new int[a.length + num];
        // 拷贝原数组
        for (int i = 0; i < a.length; i++) {
            b[i] = a[i];
        }
        // 接收扩容元素(多个元素时默认以一个空格间隔)
        System.out.print("请输入需要添加的元素:");
        String[] s = scanner.nextLine().split(" ");
        for (int i = 0; i < num; i++) {
            // 添加新元素
            b[a.length + i] = Integer.parseInt(s[i]);
        }
        // 打印测试
        for (int i : b) {
            System.out.print(i + " ");
        }
    }
}

缩减

默认每次缩减一个元素,每一次询问用户是否缩减,当缩减至只剩余一个元素时,提示用户不能缩减

java
public class Main {
    public static void main(String[] args) {
        // 创建 Scanner 对象,用于接收用户输入
        Scanner input = new Scanner(System.in);

        // 初始化原始数组
        int[] a = {1, 2, 3};

        // 定义计数器,用于记录当前数组的长度
        int cnt;

        // 使用 do...while 循环结构,确保至少执行一次
        do {
            // 提示用户是否继续缩减数组
            System.out.println("是否还要继续缩减元素?输入 y / n ");

            // 获取用户输入的第一个字符
            char judge = input.next().charAt(0);

            // 如果用户输入 'n',则停止缩减并输出最终数组状态
            if ('n' == judge) {
                System.out.println("停止缩减,最终数组状态如下:");
                for (int i = 0; i < a.length; i++) {
                    System.out.print(a[i] + " ");
                }
                break; // 结束循环
            }

            // 如果用户继续缩减,则创建一个新数组,大小比原数组小1
            int[] b = new int[a.length - 1];

            // 将 a 数组的内容拷贝到 b 数组
            for (int i = 0; i < a.length - 1; i++) {
                b[i] = a[i];
            }

            // 将 a 指向缩减后的数组 b
            a = b;

            // 输出缩减后的数组
            System.out.println("缩减后的数组如下:");
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i] + " ");
            }

            // 记录缩减后的数组长度
            cnt = a.length;

            // 输出一个换行符
            System.out.println("");

            // 如果数组只剩下一个元素,则输出提示并结束程序
            if (cnt == 1) {
                System.out.print("程序结束,数组剩下最后一个元素,不再缩减");
                break;
            }

        } while (true); // 循环条件永远为 true,直到通过 break 结束
    }
}