Java学习笔记

Java 数组(二)

2018-10-13  本文已影响0人  RicherYY

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

查找元素

查找元素是数组算法的重中之重,一定要好好记忆查找算法
基本思想就是先给设置一个下标值为不可能的变量
一般都是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");
        }
上一篇 下一篇

猜你喜欢

热点阅读