Math.random()v / s随机类

时间:2015-12-27 12:10:58

标签: java random

Java中的Math类有一个方法Math.random(),它返回0到1之间的伪随机数。
还有一个班级java.util.Random,其中包含nextInt()nextFloat()nextDouble()nextLong()等各种方法。

我的问题是,如果我想得到一个范围内的随机数(比方说,30-70),那么我应该走哪条路?正在考虑的因素是速度随机性

3 个答案:

答案 0 :(得分:3)

如果查看Math.random()的实现,您会看到它使用Random类的实例:

public static double random() {
    return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
}

private static final class RandomNumberGeneratorHolder {
    static final Random randomNumberGenerator = new Random();
}

因此随机性是相同的。

也就是说,由于您需要int而不是double,因此您最好使用nextInt类的Random方法,因为它可以节省您的费用doubleint的乘法和转换。

Random rnd = new Random();
int num = rnd.nextInt(41)+30;

答案 1 :(得分:0)

Math.random()确实依赖于Random类。根据您使用的案例和数据类型,您可以使用其中任何一种。对于int Random.nextInt()可能是最好的选择。

说到随机性,一个更安全的随机类是SecureRandom。与Random不同,SecureRandom不依赖于系统时间,因此如果您的应用程序具有安全元素,那么肯定使用SecureRandom。方法名称相同,但

除外

SecureRandom secureRandom = new SecureRandom()而不是

Random random = new Random()

答案 2 :(得分:0)

我个人会选择随机类,因为在我看来,它更容易使用和影响参数,例如30-79之间的随机数

Random r = new Random(); int i = r.nextInt(40)+30;

我希望至少有一点帮助