2

配列 A に 50 個の乱数から 5 個の乱数を入力する必要があります。重複は許可されます。次に、同じ配列にもう一度入力する必要がありますが、配列の最初または 2 番目の入力には表示されなかった一意の番号を使用します。以下のコードを使用して、2 回目の配列を生成しています。最初の配列で重複を同時に検索する方法に行き詰まっています。どんな助けでも大歓迎です!ありがとう

boolean drawn;
    for (int i=0; i<A.length; i++) {
            do {
                    drawn = false;
                    A[i] = 1 + (int)(Math.random() * 50);


                    for (int j=0; j<i; j++)
                            if (A[i] == A[j]) 
                                drawn = true;                                                                               

            } while (drawn);
4

5 に答える 5

1

私はこれを行います:

List<Integer> choices = new ArrayList<Integer>();  
Random r = new Random();
for(int i = 0; i <N;i++)
{  
    choices.add(r.nextInt(N-1)+1;
}    
Set<Integer> uniques = new HashSet<Integer>();  
Collections.shuffle(uniques);  
//remove first 5 entries from uniques 
//repeat for second pass  

もちろん、これにはサイズ 5 未満のセットが残っている可能性があります (最小限のことですが)。

于 2012-12-26T20:35:44.733 に答える
0

以前の配列要素を格納する必要があるため、配列を埋めるたびに追加の配列を 1 つ使用する必要があります。何かのようなもの:

boolean drawn;
System.arraycopy( A, 0, B, 0, A.length );
for (int i=0; i<A.length; i++) {
        do {
                drawn = false;
                A[i] = 1 + (int)(Math.random() * 50);

                for (int j=0; j<A.length; j++)
                        if (A[i] == B[j]) 
                            drawn = true; 

                for (int j=0; j<i; j++)
                        if (A[i] == A[j]) 
                            drawn = true;                                                                               

        } while (drawn);

`

于 2012-12-26T20:29:54.310 に答える