Math.random() 伪随机生成并返回一个从0.0d(包括)到1.0d(不包括), 双精度小数
new Random().nextInt(指定值); 伪随机生成并返回一个 在0(包括)和指定值(不包括)之间均匀分布的整型值, 另: 随机数种子会使得取值变得有规律
在项目中发现了2种写法
方式1:
int code = (int)((Math.random() * 9 + 1) * 100000);
方式2:
int code = new Random().nextInt(max) + max;
方式1:
代入一种情况: 0.01*9=0.09+1=1.09 0.9*9=8.1+1=9.1 范围是从 1.0~9.9 如果没有特殊要求也能使用了
方式2:
由于max限定了最大值, 如果max为100,则code 永远是123 145这种 1开头的数字, 从生成范围内随机数的角度上来说这样写是有问题的
public static int generateNumber(int length) {
int max= 1;
for(int i = 1; i < length; ++i) {
max*= 10;
}
return new Random().nextInt(max) + max;
}
如果要实现的是 从范围 5(包含)-10(包含), 6个数字的随机获取, 可以用下面的写法
public static int getRandomNum(int min, int max){
return new Random().nextInt(max-min+1) + min;
}
本文探讨了Java中Math.random()和nextInt()方法在生成随机数时的两种常见用法,比较了方式1和方式2的优缺点,并提供了优化生成指定范围随机数的getRandomNum方法。特别关注了如何避免max值限制导致的规律性问题。
3713

被折叠的 条评论
为什么被折叠?



