ユーザーの入力内容に基づいて、乱数 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));
しかし、乱数を取得するのに問題があります。