2014-11-20 124 views
-1

下面是一些非常简单的示例代码来说明问题。为什么在函数中使用Random会导致重复?

case class randomizer(seed: Long){ 
    def getRandom(): Double = { 
    //Other stuff 
    val rand = new util.Random(seed) 
    rand.nextDouble() 
    } 
} 

这将始终可靠地返回相同的第一个值。每次调用getRandom。

然而,

case class randomizer(seed: Long){ 
    val rand = new util.Random(seed) 

    def getRandom(): Double = { 
    //Other stuff 

    rand.nextDouble() 
    } 
} 

这将每次返回不同的随机值。

我怀疑这是因为通过重新初始化兰德每一次(如第一次),我们最终得到该种子的第一个数字。由于种子保证每次这是预期的行为时我们将得到相同的“设置”随机数。通过将该生成器移到该函数之外,只要该类生效,它就会存在,并因此继续在该“设置”中生成数字。这是考虑这个问题的正确方法吗?

+3

<插入每周“不要在你的循环中播种RNG”在这里回答> – 2014-11-20 17:20:35

+0

@LeeDanielCrocker谢谢你。我真的很感谢你回答一个诚实的问题。 – user3789100 2014-11-20 18:03:49

+0

这确实是一周一次,尽管它有很好的文档记录和易于搜索。随着每周“你不能使用++”和“字符文字是不可改变的”问题。 30年后你也会变得愤世嫉俗。 – 2014-11-20 18:32:11

回答

0

它不是一个“集”,而是一个“流”,但是,就是这样。

相关问题