-1

2 つのランダムな int ジェネレーターが同じ整数を生成しないようにするにはどうすればよいですか? プログラムが実行されると仮定して、サンプル クラスを以下に示します。ご協力ありがとうございました。

public class TestRandom{
    int num; 

    public TestRandom(){
        num = 0;
    }
    public TestRandom(int x){
        num = x;
    }
    public String toString(){
        String print;
        if (num == 1)
            print = "1";
        else if(num == 2)
            print = "2";
        else
            print = "---";
        return print;
    }
}

public class Test{
    TestRandom[] s= new TestRandom[20];
    Random ran = new Random();
    public void setArray(){
        for(int i=0; i<s.length; i++)
            s[i] = new TestRandom();

        for(int k=0; k<4; k++)
            int RandomNum = ran.nextInt(s.length);
        s[RandomNum] = new TestRandom(1);

        for(int e=0; e<4; e++)
            int RandomNum = ran.nextInt(s.length);
        s.[RandomNum] = new TestRandom(2);
    }
}
4

3 に答える 3

1
  1. 2 つのジェネレーターが同じ数値を生成しないようにすると、ランダムではなくなります。

  2. とにかくその機能が必要な場合は、単一のインスタンスを使用し、生成された 2 番目の数値が前の数値と同じ場合は、別の数値を生成します。

ランダム性と一意性は実際には両立しないことに注意してください。

于 2013-03-18T06:02:53.230 に答える
0

これを試して

import java.util.Random;    
public class TestRandom{
     int num=0; 
     int num2=0;
     Random ran = new Random();
     num = ran.nextInt();
     num2 = ran.nextInt();
     System.out.print(num+" "+num2);
}
于 2013-03-18T05:59:35.727 に答える
0

生成された各 int をセットに追加します。

生成された各 int をチェックして、int がセットに存在するかどうかを確認します。

はいの場合、新しい int を生成します。

例えば

public class Test{
    TestRandom[] s= new TestRandom[20];
    Random ran = new Random();
  public void setArray(){
    for(int i=0; i<s.length; i++)
      s[i] = new TestRandom();

    HashSet<Integer> usedInts = new HashSet<Integer>();
    for(int k=0; k<4; k++) {
      int RandomNum;
      do {
        RandomNum = ran.nextInt(s.length);
      } while (!usedInts.add(RandomNum)); // loop until RandomNum not duplicated
      s[RandomNum] = new TestRandom(1);
    }
    for(int e=0; e<4; e++) {
      int RandomNum;
      do {
        RandomNum = ran.nextInt(s.length);
      } while (!usedInts.add(RandomNum)); // loop until RandomNum not duplicated
      s.[RandomNum] = new TestRandom(2);
    }
  }
于 2013-03-18T06:11:56.167 に答える