黑马程序员技术交流社区

标题: 大家帮我看下这个去重复的代码哪里错了 [打印本页]

作者: 惠惠惠惠惠    时间: 2014-12-3 22:04
标题: 大家帮我看下这个去重复的代码哪里错了
因为是初学者没有学过什么高级的工具只能用比较笨的方法,大家帮我瞅瞅
如题  数组去重复,例如: 原始数组是{4,2,4,6,1,2,4,7,8},得到结果{4,2,6,1,7,8}
思想 : 先求出去重复后的数组长度 l,然后定义一个该长度的方法,
在通过把原数组每个数和新定义的数组里的数相比较,重复的跳过,不重复的给新数组赋值的方法取得去重复的数组,最后打印数组
代码
public class Test6 {

         public static void main(String[] args)
         {
                 int arr[]={4,2,4,6,1,2,4,7,8};
                 int l=getlength(arr);
                 int s[]=new int[l];
                 gets(arr, s);
                 pr(s);
         }
         public static int getlength(int arr [])
         {
                 int l=1;
                 w:for(int x=0;x<arr.length-1;x++)
                 {  
                         int y=x+1;int n=1;
                         for(;y<arr.length;y++,n++)
                         {
                                 if(arr[x]==arr[y])
                                 
                                         continue w;
                                if(n==arr.length-1-x)
                                        l++;
       
                         }
                 }
                 return l;
         }
         public static void gets(int arr [],int s [])
         {
                 
               
                w: for(int x=0;x<arr.length;x++)
                        f: for(int y=0;y<s.length;y++)
                         {
                                 if(arr[x]!=s[y])
                                 {
                                         s[y]=arr[x];
                                         x++;
                                         continue w;
                                 }
                               
                         }
         }
         public static void pr(int arr [])
         {
                 System.out.print("[");
                 for(int x=0;x<arr.length;x++)
                 {
                         if(x==arr.length-1)
                                 System.out.println(arr[x]+"]");
                         else {
                                System.out.print(arr[x]+",");
                        }
                 }
         }

}
运行结果是   [8,4,0,0,0,0]
求解。。。
   
作者: caobin    时间: 2014-12-4 09:38
楼主,我没有按你的思路来思考,因为我也看不懂啊,所以就自己想了一个办法.
思路,
1.构造一个判断数组中是否包含元素的方法
2.新建一个数组,长度和原数组一致,等到输出或返回时在修改长度
3.然后拿原数组中的元素和新的数组比较,存在则不赋值。
下面是代码,可参考一下。
  1. class ArrayTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr = {4,2,4,6,9,5,1,3,7,1,2,4,7,8};
  6.                 arr(arr);


  7.         }
  8.         //确定数组中是否包含该元素
  9.         public static boolean contain(int x,int[] arr)
  10.         {
  11.                 for(int i=0;i<arr.length;i++)
  12.                 {
  13.                         if(x==arr[i])
  14.                                 return true;
  15.                 }
  16.                 return false;
  17.         }
  18.         public static void arr(int[] arr)
  19.         {
  20.                 int[] arr1=new int[arr.length];
  21.                 //用来记录新数组的长度
  22.                 int  x=0;
  23.                 for(int i=0;i<arr.length;i++)
  24.                 {
  25.                        
  26.                         if(!contain(arr[i],arr1))
  27.                         {                       
  28.                                 arr1[x]=arr[i];
  29.                                 x++;
  30.                         }
  31.                                
  32.                 }
  33.                 for(int i=0;i<x;i++)
  34.                 {
  35.                         System.out.print(arr1[i]+",");
  36.                 }

  37.         }

  38. }
复制代码




作者: quick3g    时间: 2014-12-4 16:29
本帖最后由 quick3g 于 2014-12-4 16:31 编辑

//我写了两个方法你看一下.
  1.   public static Object[] removeDuplicates1(int [] arr){
  2.                 Set<Integer> s=new HashSet<Integer>();//利用HashSet的唯一特性
  3.                 for(int i:arr)s.add(i);
  4.                 return s.toArray();
  5.         }
  6.         public static int[] removeDuplicates2(int [] arr){
  7.                 int tag=-1;//自定义标记
  8.                 int count=0;
  9.                 int[] tags=new int[arr.length];
  10.                 for(int i=0;i<arr.length-1;i++){
  11.                         if(tags==tag)continue;
  12.                         for(int j=i+1;j<arr.length;j++){
  13.                                 if(arr==arr[j]){
  14.                                         tags[j]=tag;//做一标记
  15.                                         count++;//标记的次数
  16.                                 }
  17.                         }
  18.                 }
  19.                 int[] newArr=new int[arr.length-count];
  20.                 int k=0;//新数组下标
  21.                 for(int i=0;i<arr.length;i++){
  22.                          if(tags!=tag){
  23.                                 newArr[k]=arr;
  24.                                 k++;
  25.                          }
  26.                 }
  27.                 return newArr;
  28.         }
复制代码








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