2016-09-25 3 views
-2

このコードでは、100個のランダム要素を重複して追加し、10個の固有キーを返す代わりに、100個のランダム要素をシャッフルします。どうやってやるの?空の配列に100個のランダム要素を重複して追加するにはどうすればよいですか?

public static void main(String[] args) { 

    ArrayList<Integer> uniqueKeys = new ArrayList<Integer>(); 
    for (int i = 0; i < 101; i++) { 
     uniqueKeys.add(new Integer(i)); 
    } 
    Collections.shuffle(uniqueKeys); 
    for (int i = 0; i < 10; i++) { 
     System.out.println(uniqueKeys.get(i)); 
    } 
} 
+0

あなたの要素を生成するには 'Random'を使うべきですね。 –

+1

あなたのforループを見てください.100回ではなく101回の反復があります。i <100またはi = 1を使用します。 i <101またはi = 1; i = 100など – ElChupacabra

+2

* duplicatesを許可している場合*なぜ参照が 'uniqueKeys'ですか? –

答えて

1

セットとランダムの組み合わせを使用することをおすすめします。セットを使用すると、重複を取り除くことができます。ランダムを使用すると、(擬似)乱数が得られます。

final int KEYS_COUNT = 100; 
final int MAX_KEY_VALUE = 1000; 

Set<Integer> setOfKeys = new HashSet<>(); 
Random random = new Random(); 

while (setOfKeys.size() <= KEYS_COUNT) { 
    setOfKeys.add(random.nextInt(MAX_KEY_VALUE)); 
} 

設定setOfKeysは、あなたはその後、セットからの配列を作るためにtoArray()メソッドを使用することができます以下1000その後、それらの値で100個のユニークな乱数を含んでいます。

KEYS_COUNTMAX_KEY_VALUEとすると、値はあまりランダムではなく、シャッフルされます。

関連する問題