在Java中的范围内统一生成安全随机数

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

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

你可以做

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

要么

 // 0 inclusive to 100 exclusive. int number = rand.nextInt(100); 

注意:这比say (int) (rand.nexDouble() * 100)更有效,因为nextDouble()需要创建至少53位的随机性,而nextInt(100)创建少于7位。

尝试下面的代码快照

  SecureRandom random = new SecureRandom(); int max=50; int min =1; System.out.println(random.nextInt(max-min+1)+min);