生成伪随机数的基础工具
理解 Math.random() 的工作原理与返回值范围
掌握如何使用 Math.random() 生成 0.0 到 1.0 之间的双精度浮点数
学会将其转换为 指定范围内的整数(如 1~100)
了解其适用场景与局限性
对比 Math.random() 与 java.util.Random 的区别
Math.random() 是 Java 中一个静态方法,用于生成伪随机双精度浮点数。
基本特性
返回类型:double
取值范围:0.0 ≤ random < 1.0
包含 0.0(可能返回)
不包含 1.0(永远不会等于 1.0)
无需创建对象:直接通过 Math.random() 调用
内部实现:基于单例的 java.util.Random 实例
✅ 适用于简单场景,如游戏、教学示例、模拟等
❌ 不适用于加密、安全敏感场景
public static double random()返回值:一个 double 类型的伪随机数,满足 0.0 <= value < 1.0
class Main {
public static void main(String[] args) {
double value = Math.random();
System.out.println("随机小数: " + value);
}
}随机小数: 0.4504830241585366🔁 每次运行程序,输出结果都不同(因为未设置种子)
要生成 [min, max] 范围内的整数(两端均包含),使用以下公式:
int randomInt = (int)(Math.random() * (max - min + 1)) + min;生成 1~10 的随机整数(10 次)
class Main {
public static void main(String[] args) {
int min = 1;
int max = 10;
int range = max - min + 1;
System.out.println("生成 10 个 1~10 之间的随机整数:");
for (int i = 0; i < 10; i++) {
int rand = (int)(Math.random() * range) + min;
System.out.println(rand);
}
}
}生成 10 个 1~10 之间的随机整数:
8
3
10
2
5
4
4
7
5
6✅ 注意:10 可能出现,说明 max 是包含在内的!
int secretNumber = (int)(Math.random() * 100) + 1; // 1~100String[] options = {"石头", "剪刀", "布"};
int index = (int)(Math.random() * 3); // 0, 1, 2
System.out.println("电脑出:" + options[index]);if (Math.random() < 0.3) {
System.out.println("30% 概率事件触发!");
}🔐 安全替代方案:
java.security.SecureRandom🛠 更灵活替代方案:
java.util.Random(可设种子、生成多种类型)
使用 Random 类的等效写法
import java.util.Random;
Random rand = new Random();
int number = rand.nextInt(100) + 1; // 1~100为什么 Math.random() * 100 的结果范围是 [0, 100),而 (int)(Math.random() * 100) 的结果是 0 到 99?
如果想生成 -10 到 10 之间的随机整数(包含两端),应如何编写表达式?
在多线程环境中频繁调用 Math.random() 是否会有性能瓶颈?为什么?
编写一个方法 rollDice(),模拟掷一个六面骰子(返回 1~6 的整数),使用 Math.random() 实现。