2012-10-07 47 views
0

目前,我無法從給定數組中刪除重複項。我寫了一個程序,但它只返回全零。我無法使用哈希集。在java中刪除數組中的重複項無法使用哈希集

public class Assignment05a 
{ 
    public static void main(String args[]) 
    { 
     int[] sourceArray = {1,4,5,4,1,2,3,5,9,7,12,-5,1,4,-1,-5,12,1}; 
     java.util.Arrays.sort(sourceArray); 
     eliminateDuplicates(sourceArray); 
    } 

    public static int[] eliminateDuplicates(int[] list) 
    { 
     int[] noDup = new int[list.length]; 

     for (int c = 0; c < list.length-1; c++) 
     { 
      if (list[c] != list[c+1]) 
       { 
        list[c] = noDup[c]; 
       } 
     } 

     for(int i = 0; i < noDup.length; i++) 
     { 
      System.out.println(noDup[i]); 
     } 
     return noDup; 
} 
} 

回答

2

我想我們可以更新如下eliminateDuplicates方法:

public static int[] eliminateDuplicates(int[] list){ 
    List<Integer> noDup = new ArrayList<Integer>(); 
    noDup.add(list[0]); 
    for (int c = 1; c < list.length-1; c++){ 
     if(!noDup.contains(list[c])){ 
      noDup.add(list[c]); 
     } 
    } 
    int[] noDupArray = new int[noDup.size()]; 
    for(int i = 0; i < noDup.size(); i++){ 
     noDupArray[i] = noDup.get(i); 
     System.out.println(noDup.get(i)); 
    } 
    return noDupArray; 
} 

如果你不想使用List/ArrayList,我相信你可以更新如下eliminateDuplicates方法:

public static int[] eliminateDuplicates(int[] list){ 
    int[] noDup = new int[list.length]; 
    noDup[0] = list[0]; 
    int noDupCount = 1; 
    for (int c = 1; c < list.length-1; c++){ 
     boolean bAlreadyAdded = false; 
     for (int d = 0; d < noDup.length-1; d++){ 
      if (noDup[d] == list[c]){ 
       bAlreadyAdded = true; 
      } 
     } 
     if(!bAlreadyAdded){ 
      noDup[noDupCount++] = list[c]; 
     } 
    } 
    int[] newUniques = new int[noDupCount]; 
    for(int i = 0; i < noDupCount; i++){ 
     newUniques[i] = noDup[i]; 
     System.out.println(noDup[i]); 
    } 
    return newUniques; 
} 
+0

我還沒有冒險進入arraylist,所以我試圖用數組編寫這個程序。儘管謝謝你的幫助。 – JaxJags

+0

我用沒有ArrayList的替代選項更新了答案。 –

+0

非常感謝。我現在明白了。 – JaxJags

1
public class L 
{ 
    public static void main(String [ ]args) 
    { 

    int[] arr= {1,4,5,4,1,2,3,5,9,7,12,-5,1,4,-1,-5,12,1}; 

    int[] s= new int[arr.length]; 

     for(int i=0;i<arr.length;i++){ 

      int flag=0,j; 

      for(j=0;j<i+1;j++){ 
       if(arr[i]==s[j]){      
        flag=1; 
         break; 
        } 
      } 

      if(flag==0) 
       s[j]=arr[i]; 
     } 

     for(int i=0;i<arr.length;i++) 
      System.out.println(s[i]); 
    } 
} 
+0

我想你應該給一些解釋,而不僅僅是代碼。這是關於信息答案。 – angainor

0

你或許可以將每個字符映射到一個布爾數組並將其設置爲基於布爾數組索引中該字符的ascii值爲true或false。看看這個: