我试图在随机发生器中获得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(...)它.
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)
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)
| 归档时间: |
|
| 查看次数: |
20553 次 |
| 最近记录: |