Java数组Array题目记录(插入)

题目:

在有序的数组 int[] arr = {10, 12, 45, 90} 中 插入一个值,使插入的数组仍然是有序的。

主题思想:掌握下标的使用,控制两个数组的下标,实现效果

方法一(优):

先取得比较数值应插入的下标,然后在进行循环插入

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] arr = {10, 12, 45, 90};
        int[] arrNew = new int[arr.length + 1];
        System.out.println("请输入插入的数字:");
        int num = sc.nextInt();
        int index = arr.length;// 定义一个index来获取下标,初始值为旧数组长度
        for (int i = 0; i < arr.length; i++) {
            // 判断输入的数值应该储存的位置,小于谁就储存在谁的位置
            if (num < arr[i]){
                index = i;
                break;
            }
        }
        // 循环赋值
        for (int i = 0, j = 0; i < arrNew.length; i++) {
            //当不等于index就正常赋值,旧数组下标正常移动
            if (i != index){
                arrNew[i] = arr[j];
                j++;
            }else{// 等于index 时,旧数组下标不移动,新数组添加值
                arrNew[i] = num;
            }
        }
        arr = arrNew;
        System.out.println(Arrays.toString(arr));
    }

 

方法二:

使用循环比较赋值的方法,有三种情况:

1、当输入的数值小于第一个数时,就插入在下标为0的位置;

2、用输入的数值去进行比较,当大于当前下标数且小于后一个数,就在下一个下标进行赋值

3、当大于最后一个值就在最后添加

public static void main(String[] args) {
        int[] arr = {10, 12, 45, 90};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入插入的数字:");
        int num = sc.nextInt();
        // 设置新数组的长度+1
        int[] arrNew = new int[arr.length + 1];
        // j的作用是控制旧数组输出的值
        for (int i = 0, j = 0; i < arrNew.length; i++,j++) {
            arrNew[i] = arr[j];
            if (i == 0 && arr[j] > num) {// 当输入的值小于第一个数时,将改数赋值给新数组第一个值
                arrNew[0] = num;
                // 由于新数组的值被覆盖,将旧数组的下标重新退回0重新赋值
                j--;
            } else if (i == arr.length - 1 && arr[j] < num) {// 当循环运行到最后时判断输入的数字是否大于最后一个数,i == arr.lenght是判断前面是否循环完毕
                // 如果大于,就在新数组的最后添加
                arrNew[i + 1] = num;
                // 退出循环
                break;
            } else if (arr[j] < num && arr[j + 1] > num) {// 判断输入的数字是否大于当前数字小于后一个数字
                // 如果在就将num插入到后一位
                arrNew[i + 1] = num;
                // 控制新数组的下标,提前一位,避免和新插入的数字冲突
                i++;
            }
        }
        arr = arrNew;
        System.out.println(Arrays.toString(arr));
    }

 

posted @ 2021-05-27 16:11  Julian_jiang  阅读(93)  评论(0编辑  收藏  举报