1

ランダムに生成された整数を配列に割り当てるループがあります。同じ整数が配列に 2 回入力されないようにする方法が必要です。

全体的なループ内にループを作成するとうまくいくと思いましたが、ここで何を実行すればよいかわかりません。

int wwe[] = new int[9];
for(int i = 0; i < 9 ; i++){
    int randomIndex = generator.nextInt(wwe.length);
    wwe[i] = randomIndex;

    System.out.println(wwe[i]);
    System.out.println("########");
    for(int j = 0; j < 9; j++){
        System.out.println("This is the inner element " + wwe[j]);
    }
}
4

4 に答える 4

4

一意の値を強制したい場合は、Setなど、そのような動作を目的としたデータ構造を使用してください。TreeSetまたはHashSetは完全に機能します。

于 2013-01-02T07:52:32.790 に答える
1

あなたは実際に配列をシャッフルしようとしています。

本当に探しているのは、配列のランダムな順序を見つけることであることに注意してください。これは順列と呼ばれます。

Javaでは、リストを使用して簡単に実行できますCollections.shuffle(). 独自に実装しようとしている場合は、 fisher yates shuffle
を使用してください。実装はかなり簡単です。

他の回答では Collections.shuffle() でそれを行う方法が既に示されているため、元の配列をリストに変換する必要のないフィッシャー イェイツ シャッフルの簡単な実装と例を次に示します。

private static void swap (int[] arr, int i1, int i2) {
    int temp = arr[i1];
    arr[i1] = arr[i2];
    arr[i2] = temp;
}
private static void shuffle(int[] arr, Random r) { 
    for (int i =0; i < arr.length; i++) {
        int x = r.nextInt(arr.length - i) + i;
        swap(arr,i,x);
    }
}
public static void main(String... args) throws Exception {
    int[] arr = new int[] {1 , 5, 6, 3, 0, 11,2,9 };
    shuffle(arr, new Random());
    System.out.println(Arrays.toString(arr));
}
于 2013-01-02T08:08:07.423 に答える
1

次のようなものが要件を満たすはずです。
HashSet を使用して一意の要素を実現します。

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

    while ( sint.size() < 9){
        sint.add(random.nextInt());
    }
于 2013-01-02T09:05:04.513 に答える
0

たとえば、使用できますCollections.shuffle

public static void main(String[] args) {
    List<Integer> a = new ArrayList<>(9);
    for (int i = 0; i < 9; i++) {
      a.add(i);
    }
    Collections.shuffle(a);
    System.out.println(a);
  }
于 2013-01-02T08:08:40.123 に答える