Java中的Math
类有一个方法Math.random()
,它返回0到1之间的伪随机数。
还有一个班级java.util.Random
,其中包含nextInt()
,nextFloat()
,nextDouble()
,nextLong()
等各种方法。
我的问题是,如果我想得到一个范围内的随机数(比方说,30-70),那么我应该走哪条路?正在考虑的因素是速度和随机性。
答案 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
方法,因为它可以节省您的费用double
到int
的乘法和转换。
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;
我希望至少有一点帮助