【问题标题】:Why random is behaving differently here?为什么随机在这里表现不同?
【发布时间】:2014-04-10 18:57:36
【问题描述】:

谁能解释一下为什么下面的代码会输出0 1 2 3 4 5 6 7 8 9

 Random random = new Random(-6732303926L);
    for(int i=0;i<10;i++)
        System.out.println(random.nextInt(10)+" ");

从 Java API Random 我可以看到构造函数 Random(long seed) 使用单个 long seed 创建了一个新的随机数生成器。那么,这又是随机的了,为什么每次都给出一个固定的输出呢?

【问题讨论】:

  • 你找到了一颗很酷的种子。
  • @SotiriosDelimanolis 是特例吗?我找到了这段代码 sn-p。
  • 这是一个特殊情况,就像您使用种子 1234567890131215151351 或任何其他种子一样。它输出对我们人类有意义的东西这一事实并不意味着它不是随机的(尽管仍然基于种子和算法)。
  • 如果您更改种子,它会按预期工作。我想你找到了一颗神奇的种子。
  • 谢谢。很抱歉造成混乱

标签: java random


【解决方案1】:

它每次都会给出固定的输出,因为您使用的是相同的种子。您使用的特定种子恰好给出顺序输出:0 1 2 3 4 5 6 7 8 9

【讨论】:

  • 再次。从我提到的构造函数中,它将根据 javadoc 生成随机数。
  • @ShreyosAdikari 它会根据你给它的种子生成一个随机数。如果您在 Random 的多个实例中使用相同的种子,它将始终产生相同的结果。
  • 谢谢。很抱歉造成混乱
  • @ShreyosAdikari 你得到一个由种子决定的伪随机数序列。
  • @BrianRoach 谢谢布赖恩。
【解决方案2】:

从 Java API Random 我可以看到构造函数 Random(long seed) 使用单个长种子创建一个新的随机数生成器。那么,这又是随机的了,为什么每次都给出一个固定的输出呢?

seed 用于在程序的不同运行中生成相同的输出(来自随机操作)。因此,每次使用相同的种子创建 Random 对象时,它都会输出相同的结果。

注意: 您选择的种子有一个特定的输出,即0 1 2 3 4 5 6 7 8 9,但这并不意味着什么。还会有一些其他种子具有相同的输出。

【讨论】:

  • 谢谢。很抱歉造成混乱
【解决方案3】:

每一个奇怪的序列都有一个非零的发生概率:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多