黑马程序员技术交流社区

标题: 一个已经定义的数组怎么添加新元素 [打印本页]

作者: wuerbuzuo    时间: 2015-1-30 16:13
标题: 一个已经定义的数组怎么添加新元素
看到基础视频 054_数组(折半查找)_黑马程序员_Java基础视频
里面有道测试题讲的是在一个有序的数组中插入新元素,新的数组仍是有序的。
老师讲了用折半查找的方法找出需要插入的位置,但是却没有讲要怎么插入。
请问要怎么插入呢?插入后新数组长度+1,新元素后面的每个角标都要+1
作者: 边晓炎    时间: 2015-1-30 16:17
从插入位置后的元素都向后移一位!!
作者: wuerbuzuo    时间: 2015-1-30 16:52
边晓炎 发表于 2015-1-30 16:17
从插入位置后的元素都向后移一位!!

思路我是知道的 就是代码实现不知道怎么写
作者: 边晓炎    时间: 2015-1-30 17:15
wuerbuzuo 发表于 2015-1-30 16:52
思路我是知道的 就是代码实现不知道怎么写

晚上回去写一个!明天给你!!
作者: wf111sxwf    时间: 2015-1-30 18:18
数组是不可变长度的,你如果要插入就从新建立一个数组把原数组的元素复制进去,复制的过程中把要插入的元素添加到他的位置 他后面的元素向后顺延, 可变长度数组的原理就是从新建立一个数组,并不是在原有的数组里插入,数组长度不可变
作者: hiphopman    时间: 2015-1-30 20:20
数组在被创建的时候必须要给定长度,不然就会报缺少数组维,所以数组在创建的时候长度就确定下来了不能改的
作者: 艺多不压身丶    时间: 2015-1-31 12:01
等你到后面就知道了,后面有讲集合的部分,数组的长度是固定的不能改变,将数组变成集合就可以操作里面的元素了。慢慢往后面看,这些都是小问题
作者: xiaoyi    时间: 2015-1-31 13:40
就是新建一个比原来的数组长一的新数组,你得到下标后在那判断一下就可以了
作者: 边晓炎    时间: 2015-1-31 16:11
边晓炎 发表于 2015-1-30 17:15
晚上回去写一个!明天给你!!
  1. package Array;
  2. public class InsertArray
  3. {
  4.         public static int[] newArr(int[] arr, int value)
  5.         {
  6.                 int mid = insertArr(arr, value);
  7.                 int[] arrs = new int[arr.length+1];
  8.                 for(int i=0;i<arr.length;i++)
  9.                 {
  10.                         if(mid==i)
  11.                         {
  12.                                         arrs[i] = arr[i];
  13.                                         arrs[i+1] = value;
  14.                         }
  15.                         else
  16.                         {
  17.                                 if(i>mid)
  18.                                 {
  19.                                         arrs[i+1] =  arr[i];
  20.                                 }
  21.                                 else
  22.                                 {
  23.                                         arrs[i] = arr[i];
  24.                                 }
  25.                         }
  26.                 }
  27.                 return arrs;
  28.         }
  29.         public static int insertArr(int[] arr,int value)
  30.         {
  31.                 int min = 0;
  32.                 int max = arr.length-1;
  33.                 int mid = 0;
  34.                 while(min<max)
  35.                 {
  36.                         mid = (max+min)/2;
  37.                         if(arr[mid]<value)
  38.                                 min = mid+1;       
  39.                         else if(arr[mid]>value)
  40.                                 max = mid-1;
  41.                         else
  42.                                 return mid;
  43.                 }
  44.                 return mid=min;
  45.         }
  46.         public static void main(String[] args)
  47.         {
  48.                 int[] arr = {1,2,7,9,12,21,22};
  49.                 for(int i=0;i<arr.length;i++)
  50.                 {
  51.                         if(i==0)
  52.                                 System.out.print("插入前的数组:"+"{");
  53.                         if(i==arr.length-1)
  54.                                 System.out.println(arr[i]+"}");
  55.                         else
  56.                                 System.out.print(arr[i]+",");
  57.                 }
  58.                 int[] arrs = newArr(arr, 19);
  59.                 for(int i=0;i<arrs.length;i++)
  60.                 {
  61.                         if(i==0)
  62.                                 System.out.print("插入后的数组:"+"{");
  63.                         if(i==arrs.length-1)
  64.                                 System.out.println(arrs[i]+"}");
  65.                         else
  66.                                 System.out.print(arrs[i]+",");
  67.                 }
  68.         }
  69. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2