黑马程序员技术交流社区

标题: 自己写的【元素插入数组】程序,有问题求指导 [打印本页]

作者: BlueWing    时间: 2015-9-5 15:19
标题: 自己写的【元素插入数组】程序,有问题求指导
本帖最后由 BlueWing 于 2015-9-5 15:23 编辑

用比较笨的一个办法(详见代码中步骤)做的一个,元素插入数组函数。
思路上有点问题,有地方没考虑到,达不到预想的功能。
代码如下,望老师指导!谢谢
  1. /*
  2. 需求:
  3. 数组的查找操作。
  4. 有一个有序的数组,想要将一个元素插入到该数组中,
  5. 还要保证该数组是有序的。
  6. {1,2,3,4,5,5,6,7,8,9}
  7. 0
  8. 思路:
  9. 1,利用插入元素与数组中元素做减法,得到的差值成为新的数组,差值最小的角标+1。
  10. 2,数组大小+1,插入元素后面的数组元素整体后移。
  11. 步骤:
  12. 1,函数返回值为数组,输入值为数组和插入值num。
  13. 2,遍历原数组,定义差值数组cha[],cha[x]=num-arr[]。
  14. 3,在cha[]数组中,去负号,找到最小值的角标min。
  15. 4,定义结果数组arrend[],将最小值角标(包含最小值)之前的数组按原顺序赋值给新数组。
  16.    最小值角标+1为插入数字的角标,之后的原数组,赋值给新数组,新数组中的角标+1。

  17. */
  18. class ArrInBlue
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 int[] arr=new int[]{1,7,11,22,35,65,77,89,123,999};
  23.                 int[] arrend=arrin(arr,-3);
  24.                 printArray(arrend);
  25.         }
  26.         
  27.         public static int[] arrin(int[] arr,int num)
  28.         {
  29.                 int[] cha=new int[arr.length];
  30.                 int[] arrend=new int[arr.length+1];
  31.                 for(int x=0;x<arr.length;x++)
  32.                 {
  33.                         cha[x]=num-arr[x];
  34.                         if(cha[x]<0)
  35.                         {
  36.                                 cha[x]=-cha[x];
  37.                         }
  38.                 }
  39.                
  40.                 int min=0;
  41.                 for(int x=0;x<cha.length;x++)
  42.                 {
  43.                         if(cha[x]<cha[min])
  44.                         {
  45.                                 min=x;
  46.                         }
  47.                                 
  48.                 }
  49.                
  50.                 for(int x=0;x<arrend.length;x++)
  51.                 {
  52.                         if(x>min+1)
  53.                                 arrend[x]=arr[x-1];
  54.                         else if(x<min+1)
  55.                                 arrend[x]=arr[x];
  56.                         else
  57.                                 arrend[x]=num;
  58.                 }
  59.                 return arrend;
  60.         }
  61.         
  62.         
  63.                 public static void printArray(int[] arr)
  64.         {
  65.                 for(int x=0;x<arr.length;x++)
  66.                 {
  67.                         if(x!=arr.length-1)
  68.                         System.out.print(arr[x]+",");
  69.                 else
  70.                         System.out.println(arr[x]);
  71.                 }
  72.         }
  73.         
  74. }
复制代码

作者: MUFCRyanCR7    时间: 2015-9-5 15:59
顶一下~~~~~~~
作者: BlueWing    时间: 2015-9-5 15:59
在这个函数中,实际比较的是插入元素与前后元素间的距离大小。
如果插入元素与后面元素距离小,则插入到了后面元素的下一个位置。
该思路不正确。经修改后,代码如下,可实现需求功能。
  1. /*
  2. 需求:
  3. 数组的查找操作。
  4. 有一个有序的数组,想要将一个元素插入到该数组中,
  5. 还要保证该数组是有序的。

  6. 思路:
  7. 1,利用插入元素与数组中元素做减法,如果值为负,则应该放在该元素前面。
  8. 2,数组大小+1,插入元素后面的数组元素整体后移。
  9. 步骤:
  10. 1,函数返回值为数组,输入值为数组和插入值num。
  11. 2,遍历原数组,定义临时变量jb,如果num-arr[x]<0,另jb=x。
  12. 3,在得到新数组arrend[]中,x<jb则arrend[x]=arr[x];x>jb则arrend[x]=arr[x-1];
  13. 4,返回arrend。

  14. */
  15. class ArrInBlue
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 int[] arr=new int[]{1,7,11,22,35,65,77,89,123,999};
  20.                 printArray(arr);
  21.                 int[] arrend=arrin(arr,67);
  22.                 printArray(arrend);
  23.         }
  24.        
  25.         public static int[] arrin(int[] arr,int num)
  26.         {
  27.                 int[] arrend=new int[arr.length+1];
  28.                 int jb=arr.length;//如果在原数组中找不到比mun大的数,则把num元素放在数组最后位置。
  29.                                                   //该语句也可以放在下面第40行。
  30.                 for(int x=0;x<arr.length;x++)
  31.                 {
  32.                         if(num-arr[x]<0)
  33.                         {
  34.                                 jb=x;
  35.                                 break;
  36.                         }
  37.                                
  38.                 }
  39.                 for(int x=0;x<arrend.length;x++)
  40.                 {
  41.                         if(x>jb)
  42.                                 arrend[x]=arr[x-1];
  43.                         else if(x<jb)
  44.                                 arrend[x]=arr[x];
  45.                         else
  46.                                 arrend[jb]=num;
  47.                                
  48.                 }
  49.                 return arrend;
  50.         }
  51.        
  52.        
  53.                 public static void printArray(int[] arr)//打印数组函数
  54.         {
  55.                 for(int x=0;x<arr.length;x++)
  56.                 {
  57.                         if(x!=arr.length-1)
  58.                         System.out.print(arr[x]+",");
  59.                 else
  60.                         System.out.println(arr[x]);
  61.                 }
  62.         }
  63.        
  64. }
复制代码



作者: BlueWing    时间: 2015-9-5 16:01
MUFCRyanCR7 发表于 2015-9-5 15:59
顶一下~~~~~~~

谢谢!找到问题了  自己思路不太对。
嘿嘿 估计新手写的   这么麻烦又没技术含量的代码    也没几个人愿意看
作者: wu199309023    时间: 2015-9-5 18:47
顶一下~~~~~~~




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