株洲网站开发公司电话,2018年公司做网站注意事项,wordpress VIP系统,wordpress 右侧最新标题字数提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 前言指定随机种子出现的问题#xff1f;总结 前言
业务中#xff0c;之前有一个抽奖的需求#xff0c;之初想让固定的奖品和玩家绑定一个固定的池子#xff0c… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 前言指定随机种子出现的问题总结 前言
业务中之前有一个抽奖的需求之初想让固定的奖品和玩家绑定一个固定的池子也就是每个用户对应抽奖的池子的随机种子是固定的但是这样就会遇到一个巨大的坑
在指定Random随机种子的时候一定要谨慎
指定随机种子出现的问题
在计算机编程中随机数生成算法实际上是通过确定性的计算来产生伪随机数序列。当你在使用随机数生成器时你可以选择设置一个种子seed这个种子作为生成随机数的起始点。
当你指定一个特定的种子时随机数生成器将使用该种子作为起点并按照确定性的计算规则生成一个伪随机数序列。这意味着只要你使用相同的种子每次运行生成的随机数序列将是相同的。
在Java中java.util.Random类的nextInt()方法使用当前时间作为默认的种子以确保每次程序运行时生成不同的随机数序列。但是如果你在创建Random对象时指定了一个特定的种子那么每次运行生成的随机数序列将是相同的这对于调试和测试来说是很有用的。
以下是一个示例代码展示了如何使用指定的种子生成相同的随机数序列
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);}}
}我们先运行一下看看输出
-1517918040
1115789266
-208917030
1019800440
-611652875然后我们再次运行N次 结果都是一样的 在上面的代码中我们指定了种子为1234并使用该种子创建了一个Random对象。每次运行程序时生成的随机数序列都将是相同的。如果你想要每次运行生成不同的随机数序列请不要指定种子或者使用不同的种子值。
需要注意的是虽然这种方法可以生成相同的随机数序列但它实际上是伪随机数序列因为它们是通过算法计算得出的并不是真正的随机数。
总结
指定随机种子虽然可以生成相同的随机数序列是有规律可循的是可以通过算法算出来的并不是真正的随机非必要情况不要指定随机种子