Java 数组(二)

作者: RicherYY | 来源:发表于2018-10-13 15:45 被阅读0次

    数组四大法宝
    增删改查
    只要是这运用熟练,基本就没有能难倒的情况

    查找元素

    查找元素是数组算法的重中之重,一定要好好记忆查找算法
    基本思想就是先给设置一个下标值为不可能的变量
    一般都是int index = -1用来记录查找元素的下标,为什么是-1呢,因为数组下标最小值就是0,永远不可能到-1。

            //查找算法
            int [] num = {15,20,25,30};
            int index = -1;
            System.out.println("请输入数字");
            Scanner in = new Scanner(System.in);
            int a = in.nextInt();
            for(int i= 0; i < num.length; i++) {
                if(num[i] == a) {
                    index = i;
                    break;
                }
            }
            if(index == -1) {
                System.out.println("很遗憾没找到");
            }else {
                System.out.println("下标为" + index);
            }
    

    增加元素(插入元素)

    基本上就是在数组空的位置插入一个数,不排序的话一点问题都没有
    最近为了赶时间偷懒把我原来写的代码贴上来

    /* 问题:Java中如何向一个已经升序排序好的数组中插入元素,得到的数组依然是升序数组
    //* 效果:
    //* int[] array = {1,3,7,12,24,36,48};
    //* 插入数字9后新数组为
    //* int[] newArray = {1,3,7,9,12,24,36,48};

    理清一下思路:
    1.创建一个新的数组(不要忘了数组创建方式)(扩容)
    2.将原来数组的元素赋值给新数组(新数组比老数组多一个位置)
    3.查找要插入数组的位置(要输入的数组元素小于被插数组的后一个数)
    4.操作下标使原来数组中最后一个下标移动到空的位置,前一个往后一个移动(插队思想)

          
           //* 问题:Java中如何向一个已经升序排序好的数组中插入元素,得到的数组依然是升序数组 
           //* 效果: 
           //* int[] array = {1,3,7,12,24,36,48}; 
           //* 插入数字9后新数组为 
           //* int[] newArray = {1,3,7,9,12,24,36,48}; 
           
          int [] array = {1,3,7,12,24,36,48};   //原数组
          int [] newArray =new int[array.length+1];   //创建新数组,长度比原数组多1
          
          for (int i = 0; i < array.length; i++) {      //将原数组的元素赋值给新数组
              newArray[i] = array[i];
          }
          System.out.print("请输入一个数:");
          Scanner sc = new Scanner(System.in);
          int num = sc.nextInt();                //键盘中录入需要插入的数             
          
          int index = -1;                        //定义要查找插入元素的位置下标
          for (int j = 0; j < newArray.length; j++) {
              if(num < newArray[j]) {            //找到要插入为下标找到下标的的这个位置要比后面的数小(升序情况)
                  index = j ;
                  break;
              }
          }
          if(index == -1) {
              newArray[newArray.length -1] = num;
              System.out.println("没找到下标");
          }else {
          
          
               //* 从后往前添加,newArray.length-1为数组的最后一位。
               //*  i一定小于 index,因为i要循环插入后的元素,所以小于插入元素的下标。
               //*  i--是因为从数组最大的下标开始,第二次循环是从最后倒是第二个下标开始移动往后移动,覆盖了后面的值,插队的思想,最后一个往空移动,前一个往后面一个移动
              
              for(int i = newArray.length-1; i > index; i--) {
                  newArray[i] = newArray[i-1];
              }
              newArray[index] = num;
              }
          for(int i = 0; i < newArray.length; i++) {
              System.out.println(newArray[i]);
          }
    
    
    

    删除元素

    理解了插入一个元素以后,删除本质上是把后一位下标的数字,覆盖前一位的位置上
    记得没有新创建数组的情况下,打印的时候要把原来的数组-1,相当于删除了一位

                     /*
             * 删除数组一个元素
             * 给出一个数组 a={11,13,15,27}
             * 删除13这个元素
             */
            
            int [] a = {11,13,15,27};
            int index = -1;
            int num = 13;
            
            for (int i = 0; i < a.length; i++) {
                if(a[i] == num) {
                    index = i;
                    break;
                }
            }if(index == -1) {
                System.out.print("没找到要修改的数据");
            }else {
                for (int i = index; i < a.length-1; i++) {
                    a[i] = a [i+1];
                    
                }
            }
            for (int i = 0; i < a.length -1; i++) {  //删除一位之后,打印的情况下要-1
                System.out.print(a[i]+"\t");
            }
    

    相关文章

      网友评论

        本文标题:Java 数组(二)

        本文链接:https://www.haomeiwen.com/subject/mamoaftx.html