2017-02-27 10 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つの複製を持っていれば私が提示したこのコードは、しかし私はいくつかの例を持っているとき、私は1,14,20,1,38,1,5です。ミドル1では変わりますが、2番目のミドル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

ジョーディ、私はそれを信じていますそれは働いた、私は10回試してみると私は重複を持っていたことはありません。しかし、私はちょうどそれが常に大丈夫になることを確認するためにいくつかの他のソリューションを掘り起こそうとします。 – Mapet

+0

Mapet @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

Arno私もあなたのコードを試しました、私はあなたのステップを理解しているが、それはduplicates.Thanksを作り続けています。 – Mapet

関連する問題