为什么使用带有硬编码种子的随机总是产生相同的结果? [复制]

2024-01-16

下面的简单 Java 程序使用了java.util.Random类,使其始终显示“hello world”。代码片段如下所示。

package nomain;

import java.util.Random;

final public class J
{
    public static String randomString(int seed)
    {
        Random rand = new Random(seed);
        StringBuilder sb = new StringBuilder();

        for(int i=0;;i++)
        {
            int n=rand.nextInt(27);
            if (n==0)
            {
                break;
            }
            sb.append((char) ('`'+n));
        }
        return sb.toString();
    }

    public static void main(String args[])
    {
        System.out.println(randomString(-229985452)+' '+randomString(-147909649));
    }
}

令人惊讶的是,即使使用 Random 类导致生成随机数,它也始终显示“hello world”,因此,每次运行时都应更改数字,并且相应的字符也应相应更改,但它始终仅显示一个稳定的字符串,如上所述“hello world”。为什么会发生这种情况?


答案是传入的参数。它用于为随机数生成器提供种子。

Random rand = new Random(seed);

PRNG 并不是真正随机的 - 它们是确定性的,但旨在模拟随机性。因此,它们更适合称为“伪随机数生成器”。

对于给定的种子,PRNG 将始终生成相同的数字。然后,它可能使用其最后的结果作为下一个值的输入,因此通过用已知值播种 PRNG,您将始终生成已知的“随机”数字序列。

已知数字 -229985452 和 -147909649 是种子,它们将导致特定的 PRNG 生成 5 个数字的序列,可以解释为“hello”和“world”。如果您要更改这些数字,您将获得不同的 5 字符序列,但只要种子保持不变,每次运行程序时它们都是相同的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用带有硬编码种子的随机总是产生相同的结果? [复制] 的相关文章

随机推荐

  • 在 Python 中使用正则表达式替换除特定元素之外的所有元素

    在Python中使用正则表达式 我试图删除字符串中的所有XML类型元素 除了那些包含QUOTE的元素 例如
  • 如何包含文件上传对话框

    我获得了一些 C 图形扩展代码来上传 Excel 文件 以便导入到 购买收据 屏幕上的 分配 弹出屏幕中 未包含的是似乎用作对话框的 PXSmartPanel 任何关于如何设置 配置此智能面板以实现给定代码中的目的的帮助将不胜感激 有问题的
  • 我应该如何本地化现有的 JavaScript Web 应用程序?

    我有一项非常棘手的任务要做 有一个现有的 Web 项目 2 个 HTML 文件 一些插件和一个包含大约 2000 行代码的主要 JavaScript 文件 我现在必须对其进行本地化 毫无疑问 这应该早点考虑到 但他们只是错过了 您将如何寻找
  • 为什么 R 和 Python 之间得到不同的 RandomForest 结果?

    我正在尝试比较使用 R 和使用 Python 的随机森林模型的结果 我要比较的模型性能的关键衡量指标是 AUC ROC 曲线下面积 原因是 AUC 值代表预测值 即概率 的分布 我确实发现 R 和 Python 之间的 AUC 值存在一些显
  • 如何在不使用 Java 中的日历并且没有时间戳的情况下获取昨天的日期? [复制]

    这个问题在这里已经有答案了 我写了一个方法来获取当前日期的格式yyyy MM dd并希望能够创建另一种方法来获取昨天的日期 即当前日期的前一天 所有这些需要的是日期而不是时间戳 我不想使用Calendar以及 我这样设置当前日期 publi
  • phpmyadmin启用删除数据库语句

    我的托管提供商提醒我 我超出了 1000 桌限制 我有很多数据库 想一次删除更多 不幸的是 他们没有多选功能 所以我决定在 phpmyadmin 中使用查询 当我尝试类似的事情时DROP database some name I get D
  • 如何计算手机从静止状态到垂直方向的移动量?

    我正在使用 android 操作系统开发一个应用程序 我需要知道如何计算设备在垂直方向上的移动 例如 设备处于静止状态 A点 用户将其拿在手中 B点 现在A点和B点之间存在高度变化 我将如何计算 我已经阅读了有关传感器和加速度计的文章 但我
  • CodeBehind 中的动态上下文菜单

    我只想为我动态创建的几个对象添加 ContextMenu 但是 我发现的唯一方法是在运行时创建 ContextMenu 如下所示 ContextMenu pMenu new ContextMenu MenuItem item1 new Me
  • 如何在 Doxygen 示例中保留注释

    我有一个简单的方法 带有一条注释 我想在我的 doxygen 主页中用作示例 code void showNum int numToDisplay This is just a method to display a value std c
  • 有没有办法对打印媒体和默认布局使用相同的 CSS 样式表?

    我正在寻找一种方法 为打印媒体使用与默认屏幕布局相同的样式表 对我来说的好处是我不必每次更新 CSS 时都更新 2 个文件 我更喜欢有一个样式表 并通过以某种方式表示它们来指定印刷媒体的特殊规则 这可能是不可能的 但我想我应该把问题放在那里
  • Python - 解析 Json 和 XML 哪个更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 更改 php 中检索到的日期的时区

    我正在从数据库中检索格式为 2013 09 15 08 45 00 的日期 该日期是在 UTC 中设置的 我需要将其更改为另一个动态时区 基于用户 到目前为止我已经 datetime row gt field data field perf
  • 乌龟的笔触可以改变吗?

    我需要使用 Python 的海龟图形来绘制条形图 我认为简单地将笔做成粗正方形会更容易 这样我就可以像这样绘制条形图 而不必担心制作数十个矩形并填充它们 当我使用设置乌龟形状时turtle shape square 不过 它只会改变笔的外观
  • Pycharm Django 调试真的很慢

    我有一个中等大小的网站 但 PyCharm 需要大约 30 秒才能启动 Runserver 并准备好运行应用程序 如果我 运行 应用程序而不是 调试 则启动只需大约 3 秒 我可以做哪些事情来加快代码更改和调试周期 我使用的是带有 16Gb
  • Cassandra 节点几乎空间不足,但 Nodetool 清理正在增加磁盘使用?

    我们的一个节点的磁盘使用率为 95 我们向集群添加了另一个节点 希望能够重新平衡 但该节点上的磁盘空间并没有下降 我尝试执行nodetool cleanup 假设节点上有多余的键 但磁盘空间正在增加 清理真的会减少尺寸吗 是的 会的 但是您
  • 验证出生日期并检查年龄[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在我的表单中 我使用下拉菜单来显示日 月 年 你能帮我验证一下日期吗 我必须验证输入的年龄是否大于 15 岁 还要检查闰年等 PHP
  • 如何在react中不添加url的情况下导航到特定路线

    我在用着react router我有一些嵌套的路线 stories and stories storyId 现在我的问题是我有一个组件是一个单一的故事并使用这个特定的storyId导航至路线 stories storyId 单击它即可查看该
  • Asp.net Core 模型绑定器接受布尔类型的随机整数

    鉴于模型具有布尔属性 public class Person public string Name get set public bool IsMale get set 当尝试发布以下有效负载时 name Bob isMale 12345
  • 将数据帧添加到 Spark 中的列表

    我正在尝试创建 n dataframes根据一的数据 我正在检查 a 的整数值column in dataframe并循环创建 n 的sql语句dataframes像 一样多Integers在专栏中 这是我的代码 val maxvalue
  • 为什么使用带有硬编码种子的随机总是产生相同的结果? [复制]

    这个问题在这里已经有答案了 下面的简单 Java 程序使用了java util Random类 使其始终显示 hello world 代码片段如下所示 package nomain import java util Random final