在 Java 中,通常使用 java.util.Random 类来生成伪随机数。这是 Java 标准库中处理随机数最常用的方式。
下面我为你详细介绍如何使用 Random 类来获取随机数。
1. 基本步骤
使用 Random 类通常分为两步:导入包、创建对象、调用方法。
import java.util.Random; // 1. 导入包
public class RandomDemo {
public static void main(String[] args) {
Random random = new Random(); // 2. 创建 Random 对象
// 3. 调用方法生成随机数
int num = random.nextInt();
System.out.println(num);
}
}
2. 常用方法速查表
Random 类提供了多种方法来生成不同类型的随机数:
方法名 返回类型 说明
nextInt() int 返回一个任意的随机整数(范围涵盖 int 所有值)
nextInt(n) int 返回一个 [0, n) 之间的随机整数(包含 0,不包含 n)
nextDouble() double 返回一个 [0.0, 1.0) 之间的随机浮点数
nextFloat() float 返回一个 [0.0, 1.0) 之间的随机单精度浮点数
nextBoolean() boolean 返回一个随机的布尔值 (true 或 false)
nextLong() long 返回一个随机的长整型数字
3. 核心使用场景
场景一:生成指定范围内的整数
这是最常见的需求,比如生成 1 到 100 之间的随机数。
* 公式: int randomNum = min + random.nextInt(max - min + 1);
* 原理: 先用 nextInt(范围) 生成从 0 开始的数,然后加上最小值进行“平移”。
Random random = new Random();
// 生成 [1, 100] 之间的随机整数(包含1和100)
int num1 = 1 + random.nextInt(100);
// 解析:nextInt(100) 生成 0-99,加上1变成 1-100
// 生成 [5, 15) 之间的随机整数(包含5,不包含15)
int num2 = 5 + random.nextInt(10);
System.out.println("1-100之间的随机数: " + num1);
场景二:生成指定范围内的小数
利用 nextDouble() 生成 [0.0, 1.0) 的特性,通过缩放和平移来获取范围。
* 公式: double randomNum = min + (max - min) * random.nextDouble();
Random random = new Random();
// 生成 [1.0, 5.0) 之间的随机小数
double decimal = 1.0 + (5.0 - 1.0) * random.nextDouble();
System.out.println("随机小数: " + decimal);
4. 关于“种子”的特殊用法
Random 类的构造函数可以接收一个 seed(种子)参数。种子决定了随机数序列的起始点。
* 无参构造 (new Random()): 种子基于当前系统时间(纳秒级),每次运行程序生成的序列都不同(看起来是“真随机”)。
* 有参构造 (new Random(long seed)): 如果种子相同,生成的随机数序列完全相同。这在需要复现结果的场景(如游戏存档、调试、算法重现)非常有用。
// 每次运行结果都不同
Random random1 = new Random();
// 每次运行结果都相同(因为种子固定为 12345)
Random random2 = new Random(12345);
5. 另一种简单方式:Math.random()
如果你只需要简单的随机小数,不需要复杂的类型控制,可以直接使用静态方法 Math.random()。
// 直接返回 [0.0, 1.0) 的 double 值
double d = Math.random();
// 生成 0-99 的整数
int i = (int)(Math.random() * 100);
总结建议:
* 如果你需要生成多种类型(int, double, boolean, byte数组)或者需要控制随机数范围,使用 java.util.Random。
* 如果你只是简单地需要一个 0 到 1 之间的小数,使用 Math.random() 更快捷。