1

ユーザーの入力内容に基づいて、乱数 0 ~ 499 を 2 セットで取得しようとしています。たとえば、234 と 58 は 1 つのセットですが、ユーザーは 8 つのセットを要求する場合があります。234 と 58、12 と 444、198 と 58 など、冗長な番号が表示されないようにしています (58 は 2 回表示されます)。

これを防止しようとしている方法は、見つかった数字を配列に入れて、次の試合に行くときに配列をチェックして、それらがまだ使用されていないことを確認することです。これの最善の方法は何だろうと思っていました。明らかに、最初の周回ではまだ番号が選択されていないため、確認する必要はありません。しかし、次は冗長になったらどうしますか?数値を取得してから配列をチェックします。既に配列にある場合、戻って新しい数値を取得するにはどうすればよいですか? do while ループかな?

これが私がしていることです:

//now add the specified number of random connections
    System.out.println();
    System.out.println("new connection(s): ");

    //array for keeping track of the new connections to prevent redundant add's
    int redundant [] = new int[con*2];

    for( int i = 1; i <= con; i++ ){
        Random ran = new Random();
        if( i == 1){
            int ran1 = ran.nextInt(sWorld.length-1) + 1;
            int ran2 = ran.nextInt(sWorld.length-1) + 1;
            redundant[i - 1] = ran1;
            redundant[i] = ran2;
            System.out.println("     " + ran1 + " - " + ran2);
        }
        else{
            int ran1 = ran.nextInt(sWorld.length-1) + 1;
            int ran2 = ran.nextInt(sWorld.length-1) + 1;
            //need help
        }

前もって感謝します!

編集。以下の方法で行く(コレクションを使用)

        List<Integer> nums = new LinkedList<Integer>();
    for( int i = 0; i <= 499; i++ ){ 
        nums.add(i);
    }

    //shuffle the collection for more randomness


    System.out.println();
    System.out.println("new connection(s): ");
    for (int x = 1; x <= con; x++){
        Collections.shuffle(nums);

        Random ran = new Random();
        int r1 = nums.remove(ran.nextInt(nums));
        int r2 = nums.remove(ran.nextInt(nums));

しかし、乱数を取得するのに問題があります。

4

3 に答える 3

3

目的の範囲 (つまり 0 ~ 499) のすべてのインデックスでコレクションを埋めてから、 を使用しますCollections.shuffle()

于 2013-04-09T01:02:35.837 に答える