PS:今天发得时间比较早,因为一周有两天的自习时间。
思路分析: 方法一:
先创建一个新数组,长度为原数组长度+1;
然后将元素组的数据复制到新建的数组
之后将在要插入的位置放入要插入的数据
在插入位子的后面元素全部后移。(后移非常耗时)。 方法二:
新建一个数组,长度为原数组的长度+1
在将原数组对新数组的拷贝中,进行判断(比如要在第一个位置插入一个元素时)。则将新数组的第一个位置给空出来。然后将原数组的后面数据继续复制到新数组中去。
最后将要插入的数据放到要添加的位置。
在这里最核心的代码(也就是难点就是如何在新数组空出来一个位置后,对原数组的数复制到新数组的后面)这里有个小窍门:请往下看:
//用for循环中的i来控制原数组的数,在每次+1时,原数中的一个数将会被遍历出来。 for(int i=0,int j;i<newarr.length;i++){ if(index!=i){ newarr[i]=arr[j]; j++; } }针对这部分核心,我对这个循环简单走一下:
1:当i=0时,j=0时,满足i<4;进入循环体,然后开始if判断此时i(0)!=index(1),然后将原数组的arr[0]的2复制到新数组的第一个位置newarr[0]的2,j=1;接着i=1,不满足if判断条件。接着i继续+1,i=2,此时j仍然为1,这时刚好很巧就把原数组arr[1]的数复制到newarr[2]的位置,哇,刚好把新数组的下标为1的位置给空出来了。简直玩完美。(这里主要强调的是newarr[i]=arr[j],惯性思维我们习惯这样用newarr[j]=arr[i]) 下面基本已经做完了,我就直接放完整代码了: import java.util.Scanner; //数组扩容 public class Arraybig { public static void main(String[] args) { int[] arr = {1,2,3,4,5} ;//j int addNum = 999; int index = 1; //判断用户输入的下标是否合理的处理,如果不合理,给出提示信 if( index >= 0 && index <= arr.length ) { //创建新的数组 int[] arrNew = new int[arr.length + 1]; for( int i = 0; i < arrNew.length; i++) { System.out.print(arrNew[i] + "\t"); } for( int i = 0, j= 0; i < arrNew.length; i++) { if( i != index) { //如果当前i 不是 index arrNew[i] = arr[j]; j++; } } System.out.println(); for( int i = 0; i < arrNew.length; i++) { System.out.print(arrNew[i] + "\t"); } arrNew[index] = addNum; System.out.println(); for( int i = 0; i < arrNew.length; i++) { System.out.print(arrNew[i] + "\t"); } arr = arrNew; //让arr 指向扩容后的数组. } else { System.out.println("你的index 不对,应该在 0-" + arr.length); } } }要求:知有个排序好(升序)的数组,要求插入一个元素,最后打印该数组,顺序依然是升序 【8, 20, 78, 99】 23 【8, 20,23, 78, 99】 分析:关键是找要插入的位置,大家发现没和上面的基本相似,上面是给定要插入的位置,而这是找到要插入的位置。
因为数值本来有序(升序),那么规律很快就能发现到,若在遍历数组的过程中找到一个比要插入数据大的数,就记录到它下标并退出循环。接下来就是上面的思路。直接对数组按指定位置添加后即可。 //用一个for循环,就能找到要插入的位置了 找要插入位置的代码: 定义一个index下标 int insertIndex=-1; for(int i=0;i<arr.length;i++){ if(arr[i]>addNum){ insertIndex=i; break; } } System.out.println("添加位置=" + insertIndex);下面就是上面的思路和分析了,只要将arrNew[index] = addNum;修改为arrNew[insertIndex] = addNum;然后就是数组的添加了 完整代码如下:
import java.util.Scanner; public class Homework03 { public static void main(String[] args) { int[] arr = {10,12, 45, 90}; //3. 数组添加(指定位置添加) 代码 int insertNum = -23; //int insertIndex = -1; int insertIndex = arr.length; for( int i = 0; i < arr.length; i++) { if( insertNum <= arr[i]) { insertIndex = i; break; } } System.out.println("添加位置=" + insertIndex); //添加 //创建新的数组 int[] arrNew = new int[arr.length + 1]; //遍历 arrNew = {1,0,2,3,4,5} for( int i = 0, j= 0; i < arrNew.length; i++) { if( i != insertIndex) { //如果当前i 不是 index arrNew[i] = arr[j]; j++; } } arrNew[insertIndex] = insertNum; arr = arrNew; //遍历arr 看 for( int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } } }各位小伙伴,最后如果想循环添加的话,请查看博客的上一篇。。。