Random指定随机种子遇到的坑

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

业务中,之前有一个抽奖的需求,之初想让固定的奖品和玩家绑定一个固定的池子,也就是每个用户对应抽奖的池子的随机种子是固定的!但是这样就会遇到一个巨大的坑!

在指定Random随机种子的时候一定要谨慎!

指定随机种子出现的问题?

在计算机编程中,随机数生成算法实际上是通过确定性的计算来产生伪随机数序列。当你在使用随机数生成器时,你可以选择设置一个种子(seed),这个种子作为生成随机数的起始点。

当你指定一个特定的种子时,随机数生成器将使用该种子作为起点,并按照确定性的计算规则生成一个伪随机数序列。这意味着,只要你使用相同的种子,每次运行生成的随机数序列将是相同的。

在Java中,java.util.Random类的nextInt()方法使用当前时间作为默认的种子,以确保每次程序运行时生成不同的随机数序列。但是,如果你在创建Random对象时指定了一个特定的种子,那么每次运行生成的随机数序列将是相同的,这对于调试和测试来说是很有用的。

以下是一个示例代码,展示了如何使用指定的种子生成相同的随机数序列:

java 复制代码
import java.util.Random;

public class RandomExample {
    public static void main(String[] args) {
        long seed = 1234; // 指定种子
        Random random = new Random(seed);

        for (int i = 0; i < 5; i++) {
            int randomNumber = random.nextInt();
            System.out.println(randomNumber);
        }
    }
}

我们先运行一下看看输出

java 复制代码
-1517918040
1115789266
-208917030
1019800440
-611652875

然后我们再次运行N次 结果都是一样的

在上面的代码中,我们指定了种子为1234,并使用该种子创建了一个Random对象。每次运行程序时,生成的随机数序列都将是相同的。如果你想要每次运行生成不同的随机数序列,请不要指定种子,或者使用不同的种子值。

需要注意的是,虽然这种方法可以生成相同的随机数序列,但它实际上是伪随机数序列,因为它们是通过算法计算得出的,并不是真正的随机数。

总结

指定随机种子虽然可以生成相同的随机数序列,是有规律可循的,是可以通过算法算出来的,并不是真正的随机!非必要情况!不要指定随机种子!

相关推荐
封奚泽优21 天前
使用Python制造扫雷游戏
开发语言·python·游戏·pygame·扫雷·random
封奚泽优1 个月前
使用Python实现单词记忆软件
开发语言·python·random·qpushbutton·qtwidgets·qtcore·qtgui
赴3351 个月前
Numpy 库 矩阵数学运算,点积,文件读取和保存等
人工智能·算法·numpy·random·dot
山烛1 个月前
小白学Python,标准库篇——随机库、正则表达式库
开发语言·python·正则表达式·random·re·随机库·正则表达式库
Yant2245 个月前
Python Random 模块使用完全指南
python·random
AQin10127 个月前
【伪随机数】关于排序算法自测如何生成随机数而引发的……
算法·random·随机数·伪随机数
白雪公主的后妈7 个月前
Python爬虫基础——IP反爬虫的应对
爬虫·python·random·requests模块·parsel
壹屋安源8 个月前
自动生成发票数据并存入Excel
python·excel·pandas·random·datetime·faker
是十一月末8 个月前
Python模块之random、hashlib、json、time等内置模块语法学习
python·学习·json·random·os·datetime
萧鼎9 个月前
Python中的随机数生成与控制:random库实战解析
python·random·随机数