zoukankan      html  css  js  c++  java
  • 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));
        }
  • 相关阅读:
    【数据库开发】在Windows上以服务方式运行 MSOPenTech/Redis
    【数据库开发】在Windows上以服务方式运行 MSOPenTech/Redis
    【数据库开发】windows环境下通过c++使用redis
    【数据库开发】windows环境下通过c++使用redis
    【VS开发】【miscellaneous】windows(64位)下使用curl命令
    【VS开发】【miscellaneous】windows(64位)下使用curl命令
    【数据库开发】windows下使用c++调用redis
    【数据库开发】windows下使用c++调用redis
    【VS开发】【miscellaneous】 Windows下配置Git
    【VS开发】【miscellaneous】 Windows下配置Git
  • 原文地址:https://www.cnblogs.com/MoonASixpence/p/14818347.html
Copyright © 2011-2022 走看看