1

1私のコードは、からまでの範囲のリストからランダムに6つの数字を選択する必要があります45

コードを実行すると(以下)、出力はでした [4, 4, 17, 18, 27, 37]出力に重複があるとは思っていませんでした。重複がある可能性はどのようにありますか?私のコードは、選択された数字を削除する必要がありますlist

    Random rng = new Random(); 
    int size = 45;
    int sixList[] = new int[6];
    ArrayList<Integer> list = new ArrayList<Integer>(size);
    ArrayList<Integer> list2 = new ArrayList<Integer>(6);
    for(int i = 1; i <= size; i++) {
        list.add(i);
    }
    Random rand = new Random();
    for(int i = 0; list.size() > 39; i++){
        int index = rand.nextInt(list.size());
        if (index == 0){
            index = rand.nextInt(list.size());
            list2.add(index);
            list.remove(index);
        }else{
            list2.add(index);
            list.remove(index);
        }
    }
    Collections.sort(list2);
    System.out.print(list2);
4

2 に答える 2

1

問題は、乱数のリストにインデックス値を追加していることです。

コードを変更する

list2.add(index);
list.remove(index);

list2.add(list.remove(index));
于 2013-03-21T18:00:10.483 に答える
0

リストはインデックスを維持し、重複する要素をまったく気にしません。重複を避けるために、リストではなくセットを使用する必要があります。Setにユーザー定義クラスを含める場合は、HashSetなどのSetクラスによって要素が重複しているかどうかを判断するために使用されるequals()とhashcode()を実装することを忘れないでください。

Setにプリミティブが含まれている場合は、int、longなどのプリミティブデータ型に対して重複が自動的に処理されるため、重複を忘れてください。したがって、ListではなくSetを使用することをお勧めします。コレクション内の要素の重複を避けるため

于 2013-03-21T17:58:48.643 に答える