我的想法:
  定义一个数组:b[a.Length]  
  遍历数组a,对每一个a[i],判断是否在b中  
   
  if   a[i]在b中,继续  
  else   把a[i]加到b中,  我的问题是 如果 a[i]在b中, 应该怎样继续检查下一个? 如果是string可以令a[i]=null, 但是是int[],应该怎样用java语言表达呢?

解决方案 »

  1.   

    如果是int你可以用Integer这种类型也可以让它等于null.
      

  2.   

    好象还是不对...
    我的method:
        public static int[] removeDuplicate(int[] p) {          int[] temp = new int[p.length];
              int t = 0;
              for (int i = 0; i < p.length; i++) {
                    boolean isDuplicate = false;
                    for(int j=0; j <= i; j++){
                          if(temp[j] == p[i]){
                                isDuplicate = true; 
                                continue;
                                 }
                          else{
                                isDuplicate = false;
                          }
                     }  
                        if (!isDuplicate) {
                       temp[t++] = p[i];
                    }
              } //for
    但是在做junit test时  显示array index out of bound exception
      

  3.   

    参考一下下面的函数:
    import java.util.ArrayList;
    import java.util.List; 
    --------------------------------------------------------------- 
    /**
         * 去掉重复项的函数
         *@param intArray 要去掉重复项的int数组
         *@return int[] 返回去掉重复项的int数组
         */
        public int[] wipeOffRepeat(int[] intArray){
            List list = new ArrayList();
            for(int i = 0;i < intArray.length;i++){
                if( !list.contains(new Integer(intArray[i]))){
                    list.add(new Integer(intArray[i]));
                }
            }
            int[] returnArray = new int[list.size()];
            for(int i = 0; i < list.size();i++){
                returnArray[i] = ((Integer)list.get(i)).intValue();
            }
            return returnArray;
            
        }
      

  4.   

    如果不能作很大改动, 需要保持前面的temp 呢?
      

  5.   

    public static  int[] removeDuplicate(int[] p) {
            
            int[] temp = new int[p.length];
            int t = 0;
            for (int i = 0; i < p.length; i++) {
                boolean isDuplicate = false;
                for(int j=0; j <= i; j++){
                    if(temp[j] == p[i]){
                        isDuplicate = true;
                        break;//这里不是continue
                    } else{
                        isDuplicate = false;
                    }
                }
                if (!isDuplicate) {
                    temp[t++] = p[i];
                }
            } //for
            return temp;//加一句返回
        }但这样做不是一种好办法,因为去掉重复项后,新的数组一般都没原来的数组那么长,你却定义了和原来的数组一样长的新数组,这时后面的数组元素默认为0
      

  6.   

    那如果我在break前加一句temp.length = temp.length - 1能不能解决呢?
      

  7.   

    或者在这之后再设另一个ARRAY?
      

  8.   

    何必弄这么复杂呢,方法有简单的解决方案的时候,还是选择简单的解决方法比较好了建议使用诸如ArrayList之类的方法来处理ArrayList<Integer> list = new ArrayList<Integer>();
    int[] is = new int[]{1,2,3,3};
    for(int i = 0; i < is.length; i++){
    if(!list.contains(new Integer(is[i])))
    list.add(new Integer(is[i]));
    }
    Integer[] iis = (Integer[]) list.toArray();
      

  9.   

    汗.....我也不想啊, 这是题目的要求.......要是再设一个array呢? 但是想不出这个新的array的长度应该怎么根据temp来设
      

  10.   

    "create the result array with appropriate size using temp array, and return the result array"
      

  11.   

    那如果我在break前加一句temp.length = temp.length - 1能不能解决呢?
    ========================
    数组的空间分配后是不能修改的ArrayList的方法我已经给出了,我想没有题目会规定用这种方法吧,只要返回的是正确的int[],因为在没完成比较前,你并不知道去掉重复项后的数组有多少项,所以用List 存,然后返回时才转成int[],
    你不能在不知道数组的长度前又要用定长的数组
      

  12.   

    你的数组越界了,(j=1;j< p.length-1; j++)你看看这样行不行!
      

  13.   

    建个hashmap
    把所有数put进去,在get出来,就没重复的了
      

  14.   

    "我想没有题目会规定用这种方法吧" 确实没有题目是用这种方法....只有我们的BT教授......
    不知道....anyways , thanks for all your help
      

  15.   

    不用另外定义一个数组,直接比较就可以了。    int num = a.length;
        loop: for (int i = 1; i < num; ) {
            // 从第二个元素开始处理
            for (int j = 0; j < i; j++) {
                // 把当前元素跟前面的每个元素进行比较
                if (a[i] == a[j]) {
                    // 如果发现重复,用最末的元素替换当前元素
                    a[i] = a[num - 1];
                    num--;
                    // 重新处理当前元素
                    continue loop;
                }
            }
            // 继续处理下一个元素
            i++;
        }    // 至此,a[0]..a[num-1] 就是无重复的了
      

  16.   

    上面已经说了,直接使用HashSet有重复的就不加进去,否则就加进去,多简单的。。
      

  17.   

    先排序,再遍历。
    或者最简单的用hashmap
      

  18.   

    不好意思,这些都不懂...JAVA语言一点也不懂...
      

  19.   

    如果是在做项目,直接用Set型的类,如HashSet,如果要保持输入顺序可用LinkedHashSet,因为Set型类,就是为了保证容器中的元素不能重复。不要用List型,Map型只能保证Key不重复,用Set型的类后,什么算法代码都不用写,直接add就行了。
    如果是在做作业,特别是数据结构的作业,还是自己先搞懂再说吧。
      

  20.   

    int[] a={1,2,3,4,2,4,3};
          int[] b=new int[a.length];
          int bnum=0;
          boolean finded;
          for(int i=0;i<a.length;i++){
            finded=true;
            for(int j=0;j<b.length;j++){if(a[i]==b[j]){finded=false;}}
            if(finded){b[bnum]=a[i];bnum++;}
           
          }
           for(int i=0;i<a.length;i++){System.out.print(a[i]);}
          System.out.println("");
           for(int i=0;i<b.length;i++){System.out.print(b[i]);} 
    --------------------------
    12342431234000
      

  21.   

    用一个For语句就行了,性能很重要。
      

  22.   

    for( length)
     if(array.IndexOf(currentOne)==-1)
       array.add (currentOne);
      

  23.   

    int[] a=new int[]{1,1,2,2,3,3,4,4,5,5};
    HashSet set=new LinkedHashSet();
    for(int i=0;i<a.length;i++)
    {
    set.add(a[i]);
    }
    int[] b=new int[set.size()];
    int c=0;
    for(Iterator it=set.iterator();it.hasNext();)
    {
    b[c]=(Integer)it.next();
    System.out.println(b[c]);
    c++;

    }