2017-02-27 87 views
0
public static int[] isthereDuplicates(int[] combination) { 
    Set<Integer> foundedNumbers = new HashSet<>(); 

    for (int i= 0; index < combination.length; i++) { 
     if (foundedNumbers.contains(combination[i])) { 
       combination[i] -= 1; 
     } else { 
      foundedNumbers.add(combination[i]); 
     } 

    return combination; 
} 

我需要查找並替換數組數組中的重複項。數組數組也是隨機選擇1到40之間的7個數字。如果我有一個副本,但是當我有幾個例如我有1,14,20,1,38,1,5時,我提出的代碼是有效的。它會改變爲中間1,但第二個1將保持不變。java陣列查找重複項並替換它們

+1

爲什麼你定義一個HashSet的則從來沒有使用它? ('nadjeniBrojevi') –

+0

當您將變量名稱翻譯成英文(爲什麼首先不是英文?),那麼請翻譯所有變量名稱。你的param和Set仍然需要翻譯。 – Tom

+1

您可以告訴我們您發佈的輸入(1,14,20,1,38,1,5),您要查找的結果是什麼? –

回答

0

你的代碼似乎有小的修改和翻譯位工作。

public static int[] imaliDuplikata(int[] combination) { 
    Random r = new Random(); 
    Set<Integer> foundeNumbers = new HashSet<>(); 

    for (int i = 0; i < combination.length; i++) { 
     if (foundeNumbers.contains(combination[i])) { 
      combination[i] = r.nextInt(40); 
     } else { 
      foundeNumbers.add(combination[i]); 
     } 

    } 
    return combination; 
} 

執行。在這種方式:

int[] i = {1,14,20,1,38,1,5}; 
System.out.println(Arrays.toString(imaliDuplikata(i))); 

你會得到所有出現反覆更換號碼。

各種執行:

[1, 14, 20, 0, 38, 35, 5] 
[1, 14, 20, 11, 38, 1, 5] 
[1, 14, 20, 22, 38, 30, 5] 
[1, 14, 20, 37, 38, 39, 5] 
+2

它可以返回重複值,即:'[1,14,20,38,38,39,5]'' r.nextInt(40);'可以返回相同數量的所有的時間 – Uata

+0

霍爾迪阿,我beleive那它的工作,因爲我嘗試了10次,我從來沒有重複。但我會嘗試挖掘一些其他解決方案,以確保它始終可以。 – Mapet

+0

Matil @Uata說的是正確的,你可以重複使用這個解決方案,因爲你得到一個隨機數,但你可以添加一段時間來檢查隨機int是否已經在Map中,而不是添加它,否則,獲得一個新的隨機值。 .. –

0

我相信這能解決你的問題:

首先你確定你的數組中的號碼和你記錄他們沒有被發現呢。

然後你去的數字,當你找到一個還沒有被發現,你把它標記爲找到。

當你找到任何你想用它做你做得再數(在這種情況下,我把它的值-1)

public static int[] duplicates(int[] combination) { 
      HashMap<Integer, Boolean> foundNumbers = new HashMap<>(); 
      for (int i : combination) { 
       if(foundNumbers.containsKey(i)) continue; 
       foundNumbers.put(i, false); 
      } 

      for (int i = 0; i < combination.length; i++) { 
       if(!foundNumbers.get(combination[i])) { 
        foundNumbers.put(combination[i], true); 
       } else { 
        combination[i] = -1; 
       } 
      } 

      return combination; 
     } 
+0

阿諾我也試過你的代碼,因爲我瞭解你的步驟,但它不斷做出重複。謝謝無論如何。 – Mapet

相關問題