【发布时间】:2015-12-27 12:10:58
【问题描述】:
Java 中的Math 类有一个方法Math.random(),它返回一个介于0 和1 之间的伪随机数。
还有一个类java.util.Random,它有各种方法,如nextInt()、nextFloat()、nextDouble()、nextLong()等。
我的问题是,如果我想获得一个范围内的随机数(比如 30-70),那么我应该走哪条路?考虑的因素是速度和随机性。
【问题讨论】:
Java 中的Math 类有一个方法Math.random(),它返回一个介于0 和1 之间的伪随机数。
还有一个类java.util.Random,它有各种方法,如nextInt()、nextFloat()、nextDouble()、nextLong()等。
我的问题是,如果我想获得一个范围内的随机数(比如 30-70),那么我应该走哪条路?考虑的因素是速度和随机性。
【问题讨论】:
如果您查看Math.random() 的实现,您会发现它使用了Random 类的实例:
public static double random() {
return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
}
private static final class RandomNumberGeneratorHolder {
static final Random randomNumberGenerator = new Random();
}
因此随机性是相同的。
也就是说,既然你需要一个int 而不是double,你最好使用Random 类的nextInt 方法,因为它可以省去@987654328 的乘法和转换@到int。
Random rnd = new Random();
int num = rnd.nextInt(41)+30;
【讨论】:
我个人会选择 random 类,因为在我看来,它更容易使用和影响参数,例如 30-79 之间的随机数
Random r = new Random(); int i = r.nextInt(40)+30;
我希望至少有一点帮助
【讨论】:
Math.random() 确实依赖于 Random 类。根据您使用的情况和数据类型,您可以使用其中任何一种。对于int Random.nextInt() 可能是最好的选择。
说到随机性,更安全的随机类是 SecureRandom。 SecureRandom 不像 Random 那样依赖于系统时间,所以如果你的应用程序有安全元素,那么一定要使用 SecureRandom。相同的方法名称,除了
SecureRandom secureRandom = new SecureRandom() 而不是
Random random = new Random().
【讨论】:
SecureRandom 位于哪个包中?