如何在随机发生器中获得50/50的机会

Sul*_*hya 26 java

我试图在随机发生器中获得50或50的机会获得1或2.

例如:

Random random = new Random();
int num = random.nextInt(2)+1;
Run Code Online (Sandbox Code Playgroud)

此代码将输出1或2.

假设我在循环中运行它:

for ( int i = 0; i < 100; i++ ) {
    int num = random.nextInt(2)+1 ;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何使发生器为1和2制作相同的数字?

所以我希望这个循环产生数字1的50倍和数字2的50倍.

Hov*_*els 52

一种方法:填充ArrayList<Integer>50个1和50个2然后调用Collection.shuffle(...)它.

  • @Mercurybullet:我同意100%.按照惯例,确切的解决方案完全取决于他的要求 (6认同)

Oli*_*erS 19

使用Random.nextBoolean()可以很容易地实现50/50

private final Random random = new Random();

private int next() {
  if (random.nextBoolean()) {
    return 1;
  } else {
    return 2;
  }
}
Run Code Online (Sandbox Code Playgroud)

测试运行:

final ListMultimap<Integer, Integer> histogram = LinkedListMultimap.create(2);
for (int i = 0; i < 10000; i++) {
    nal Integer result = Integer.valueOf(next());
  histogram.put(result, result);
}
for (final Integer key : histogram.keySet()) {
  System.out.println(key + ": " + histogram.get(key).size());
}
Run Code Online (Sandbox Code Playgroud)

结果:

1: 5056
2: 4944
Run Code Online (Sandbox Code Playgroud)

  • 他希望(根据我的理解)50 1和50 2******.你发布的内容将与他已有的结果相同. (7认同)

Sim*_*ult 18

你无法实现这一目标random.如果您需要确切地 50个1S和2S 50,你应该尝试是这样的:

int[] array = new int[100];
for (int i = 0; i < 50; ++i)
 array[i] = 1;
for (int i = 50; i < 100; ++i)
 array[i] = 2;

shuffle(array); // implement shuffling algorithm or use an already existing one
Run Code Online (Sandbox Code Playgroud)