java中random类需通过数学运算生成指定范围随机数:整数用nextint(bound)+min得[min,max),闭区间则用nextint(max-min+1)+min;浮点数用nextdouble()*(max-min)+min得[min,max);避免math.random()混用及线程安全问题。

Java 中 Random 类本身不直接提供“生成指定范围随机数”的方法,但可以通过简单数学运算(主要是缩放 + 平移)实现。核心思路是:先用 nextInt() 或 nextDouble() 生成基础随机值,再映射到目标区间。
生成 [min, max) 区间的随机整数(推荐)
这是最常用、最安全的方式,左闭右开,避免边界越界问题。
- 使用
random.nextInt(bound):它生成[0, bound)的整数 - 要得到
[min, max),令bound = max - min,再加min
示例代码:
Random r = new Random(); int min = 10, max = 20; // 想要 [10, 20) int num = r.nextInt(max - min) + min; // 结果是 10 ~ 19
生成 [min, max] 区间的随机整数(含两端)
如果必须包含最大值(闭区间),需将上界 +1 后再计算,因为 nextInt(n) 最大只到 n-1。
- 公式:
r.nextInt(max - min + 1) + min - 注意:确保
max - min + 1不溢出且为正数
示例:
int num = r.nextInt(20 - 10 + 1) + 10; // [10, 20],结果可能是 10、11…20
生成 [min, max) 区间的随机浮点数
用 nextDouble()(返回 [0.0, 1.0)),通过线性变换缩放平移:
min + r.nextDouble() * (max - min)- 结果严格落在
[min, max)内,不会等于max
示例:
double d = r.nextDouble() * (5.0 - 1.0) + 1.0; // [1.0, 5.0)
注意事项与避坑点
避免常见错误写法:
- ❌
(int)(Math.random() * (max - min + 1)) + min—— 这是用Math.random(),不是Random类,且容易混淆区间 - ❌
r.nextInt(max) + min—— 错误缩放,结果范围变成[min, max + min) - ⚠️ 多线程环境下,建议每个线程用独立的
Random实例,或改用ThreadLocalRandom(更高效)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











