2014-06-15 273 views
-5

此代碼存在問題。我已經添加了我的德爾方法供參考:刪除陣列中的重複項

public void removeAllDuplicates() { 
    for (int i = 0; i < counter - 1;) { 
     for (int j = i + 1; j < counter;) { 
      if (array[i] == array[j]) { 
       del(j); 
      } 
     } 
    } 
} 

public void del(int place) { 
    for (int i = place; i < counter - 1; i++) { 
     array[i] = array[i + 1]; 
    } 
    array[counter] = 0; 
    counter--; 
} 
+1

我不是你的低調選民,但你說''這個代碼有問題'',但沒有告訴我們問題是什麼。請詳細說明;請告訴我們任何和所有的細節,這將有助於我們理解可能出現的問題,以便我們能夠更好地爲您提供幫助。 –

回答

1

first for-loopsecond for-loop不會對i和j增量條件。 爲for loop的synatax是

for(initialsiationOfVariables;checkCondition;UpdationOfVariables){ }

其次,你需要聲明或單獨定義的變量在這兩種方法removeAllDuplicates()counterarray[]del()如果他們不是類屬性

正確的代碼: -

public void removeAllDuplicates() { 
    for (int i = 0; i < counter - 1;i++) { 
     for (int j = i + 1; j < counter;j++) { 
      if (array[i] == array[j]) { 
       del(j); 
      } 
     } 
    } 
} 

public void del(int place) { 
    for (int i = place; i < counter - 1; i++) { 
     array[i] = array[i + 1]; 
    } 
    array[counter] = 0; 
    counter--; 
} 
1

如果你想leanr的算法,那麼這種解決方案的工作原理。

但是,在這裏,Set是您的問題的基本思路。 Set沒有重複。所以你必須做的是將數組轉換爲Set。你可以通過執行Set data structure來完成。爲了完成,我會提供一個庫代碼。

所以,我建議你堅持基本的數據結構,可以創建更優雅的解決方案。 :)

看起來很難在SO開頭的選票。但不要放棄繼續學習。

您可以爲此創建您的數據結構。

Set<T> mySet = new HashSet<T>(Arrays.asList(someArray));