在Java中生成安全的随机数并在范围内均匀分布

13

如何在范围内生成一个安全均匀的随机数?该范围可以是0到100之间。(上限不是2的幂)。

java.security.SecureRandom似乎提供了范围 0..2^n


1
https://dev59.com/AGgu5IYBdhLWcg3w0qRK - Kalhari Liyanagama
2个回答

19

你可以做

Random rand = new SecureRandom()
// 0 to 100 inclusive.
int number = rand.nextInt(101);
或者
// 0 inclusive to 100 exclusive.
int number = rand.nextInt(100);

注意:这比使用(int)(rand.nextDouble() * 100)更有效率,因为nextDouble()需要生成至少53位随机数,而nextInt(100)只需要生成不到7位。


我刚刚删除了我的评论,因为它是错误的。对不起,大家。 - Martin C.
是的,那是我的错 :( 需要学会更仔细地阅读文档。 - anoopelias

9
请尝试下面的代码片段:
    SecureRandom random = new SecureRandom();

    int max=50;
    int min =1;

    System.out.println(random.nextInt(max-min+1)+min);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接