-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. 如果您仍然希望该功能使用单个实例,并且如果生成的第二个数字与前一个相同,则生成另一个数字。

请注意,随机性和唯一性并没有真正结合在一起。

于 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 回答