2014-10-26 120 views
2

嘿,我一直在搞亂java並創建這個程序,它會經過一個數組並找到數組中的所有重複項,它的工作非常棒!但有一個小問題,如果我運行該程序,並有一個價值超過2個副本將輸出發現相同值的兩個副本 - 這可能解釋它更好在數組中查找重複項

輸出

Duplicates in Array: 1 
Duplicates in Array: 8 
Duplicates in Array: 8 

我一直停留在這一段時間,現在我知道它可能是一些小錯誤,但如果有人可以幫助我走出這將是真棒,代碼如下,感謝

import java.util.Arrays; 
public class Duplicates { 
    public static void main (String[] args) { 
     int[] values = { 8, 5, 9, 8, 6, 13, 33, 1, 98, 12, 8, 1 }; 
     Arrays.sort(values); 
     for(int i = 1; i < values.length; i++) { 
      if(values[i] == values[i - 1]) { 
       System.out.println("Duplicates in Array: " + values[i]); 
      } 
     } 
    } 
} 
+3

你應該用一個HashSet ,只允許獨特的元素,並會自動忽略重複的值。 – Afforess 2014-10-26 21:54:19

+0

http://stackoverflow.com/questions/7414667/identify-duplicates-in-a-list似乎是一個非常類似的問題 – eee 2014-10-26 21:59:47

+0

好吧,如果你需要找出每個值有多少重複,那麼你可以很容易地創建一個Map ,然後迭代數組,並將您的數組值作爲映射鍵,並在該條目已存在時增加映射值(對於鍵)。 – 2014-10-26 22:00:26

回答

2

如果我明白你的問題,那麼您可以添加一個while循環,在報告之後通過重複進展。像,

public static void main(String[] args) { 
    int[] values = { 8, 5, 9, 8, 6, 13, 33, 1, 98, 12, 8, 1 }; 
    Arrays.sort(values); 
    for (int i = 1; i < values.length; i++) { 
     if (values[i] == values[i - 1]) { 
      System.out.println("Duplicates in Array: " + values[i]); 
      while (values[i] == values[i - 1]) { // <-- add this 
       i++; 
      } 
     } 
    } 
} 

輸出是

Duplicates in Array: 1 
Duplicates in Array: 8 
+0

啊我現在看到,我實際上正在嘗試使用while循環來處理它,我只是使它過於複雜:p謝謝! – Aaron 2014-10-26 22:24:41

+0

@Aaron:這是一個更可重複使用的版本:http://pastebin.com/eWYgf8kS – 2014-10-26 22:59:03

0

我不知道,如果你被允許使用的ArrayList或者不是在你的例子,但如果你是,那麼你可以輕鬆存儲你已經擁有的價值觀和在每個for循環你可以檢查是否有任何重複。

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

     for (int j = i + 1; j < values.length; j++) { 
      if (values[i] == values[j] && !foundValues.contains(values[j])) { 
       System.out.println("Duplicates in Array: " + values[i]); 
       foundValues.add(values[i]); 
      } 
     } 
    } 

輸出

Duplicates in Array: 1 
Duplicates in Array: 8 
+0

感謝您幫助我:)我之前並沒有與arraylist合作過,我打算繼續開始尋找現在感謝他們! – Aaron 2014-10-26 22:24:09