我会通过这种方式获得更好的随机性吗?

时间:2017-10-11 09:02:22

标签: java random numbers

如果我使用这样的解决方案,我会获得更好的随机数质量吗?

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次相同颜色的事件。

1 个答案:

答案 0 :(得分:1)

不,你没有得到任何更好的随机性。查看SecureRandom如果您想使用随机值,例如用于加密。随机是可以预测的,而SecureRandom则不是(这就是区别)。

“真正的”随机数需要硬件支持,据我所知,在Java中不易提供。

至于“连续12次红色”:机会非常渺茫(假设红色或黑色的几率为50/50):1 / 0.5 ^ 12(4096中为1)尝试将给你12次红色一排。