如果我使用这样的解决方案,我会获得更好的随机数质量吗?
import java.util.*;
public class Main {
private static final Random PRNGs[] = new Random[137];
private static int nextInt() {
return PRNGs[ (int)(System.currentTimeMillis() % PRNGs.length) ].nextInt();
}
static {
for(int i=0; i<PRNGs.length; i++) {
PRNGs[i] = new Random();
}
}
public static void main(String[] args) {
System.out.println( nextInt() );
}
}
我们知道在现实生活中轮盘赌可能有12倍红色(或黑色)。如果使用一个Random对象的单个实例,则无法实现12次相同颜色的事件。
答案 0 :(得分:1)
不,你没有得到任何更好的随机性。查看SecureRandom
如果您想使用随机值,例如用于加密。随机是可以预测的,而SecureRandom则不是(这就是区别)。
“真正的”随机数需要硬件支持,据我所知,在Java中不易提供。
至于“连续12次红色”:机会非常渺茫(假设红色或黑色的几率为50/50):1 / 0.5 ^ 12(4096中为1)尝试将给你12次红色一排。