加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 什么是随机种子?

发布时间:2020-12-15 05:03:13 所属栏目:Java 来源:网络整理
导读:例如下面的代码.它有一个随机类.然而,它总是在各处产生相同的输出.在这种情况下哪个项目是种子? 来源:link import java.util.Random;public class RandomTest { public static void main(String[] s) { Random rnd1 = new Random(42); Random rnd2 = new R
例如下面的代码.它有一个随机类.然而,它总是在各处产生相同的输出.在这种情况下哪个项目是种子?

来源:link

import java.util.Random;
public class RandomTest {
    public static void main(String[] s) {
        Random rnd1 = new Random(42);
        Random rnd2 = new Random(42);

        System.out.println(rnd1.nextInt(100)+" - "+rnd2.nextInt(100));
        System.out.println(rnd1.nextInt()+" - "+rnd2.nextInt());
        System.out.println(rnd1.nextDouble()+" - "+rnd2.nextDouble());
        System.out.println(rnd1.nextLong()+" - "+rnd2.nextLong());
    }
}

解决方法

42是种子,正如 Javadoc所说的那样.那么,什么是种子?随机数很少是真正随机的 – 通常它是伪随机的.这意味着它是从一个函数生成的,即PRNG(伪随机数生成器).反过来,从函数生成意味着输出不再是随机的,因为它是可预测的!

然而,根据你的需要,这种伪随机性可能就足够了 – 我说够了,因为生成随机位是昂贵的,我不是在谈论时间或内存,而是关于钱(参见维基百科上的this link).所以,例如,如果你需要一个随机值来在你的游戏中放置敌人,那么伪随机数就可以了 – 但是如果你正在构建与安全相关的软件,你想要使用一个真正的随机数,或者至少是一个cryptographically secure PRNG .

我们如何描述PRNG,就像在Math.random()中使用的那样?它是一个函数,用种子S初始化,返回一个值数组A.注意,对于每个整数S,定义一个且只有一个数组A.例如(值不是实际的):

first call     second call     third call
seed: 14329            .18             .82             .5
seed:  3989             .7             .02            .93

因此,当您希望其结果可预测时,您可以为PRNG提供一些已知值 – 例如出于测试目的或确保每次在游戏中运行1级时,敌人总是置于同一(伪)随机地方 – 否则你不需要明确地传递种子.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读