System.Random产生相同的随机数

时间:2019-05-26 05:25:18

标签: random f#

尽管随机生成器仅创建一次,但输出始终是相同的随机结果(对于所有三个测试输出)。

一个稍大的脚本的测试代码段:

   let myRandGen = System.Random()
   let getRandomObject = 
      let options = [|"Bob"; "Jim"; "Jane"|]
      let randIndex  = myRandGen.Next(options.Length) 
      options.[randIndex] 

   printfn "New one: %s" getRandomObject
   printfn "New two: %s" getRandomObject
   printfn "New three: %s" getRandomObject

我需要每个调用的输出是随机的,当前不是。

示例输出:

New one: Jane
New two: Jane
New three: Jane

3 个答案:

答案 0 :(得分:12)

您的getRandomObject是一个值。它被评估一次。要解决此问题,请使getRandomObject为一个函数:

let getRandomObject () = 
  let options = [|"Bob"; "Jim"; "Jane"|]
  let randIndex  = myRandGen.Next(options.Length) 
  options.[randIndex]

并这样称呼:getRandomObject ()

答案 1 :(得分:4)

这对我有用:

   let myRandGen = System.Random()
   let getRandomObject () = 
      let options = [|"Bob"; "Jim"; "Jane"|]
      let randIndex  = myRandGen.Next(options.Length) 
      options.[randIndex] 

   printfn "New one: %s" (getRandomObject())
   printfn "New two: %s" (getRandomObject())
   printfn "New three: %s" (getRandomObject())

答案 2 :(得分:0)

您一次生成了随机数,在整个程序中不会改变。要在每次使用后获得一个新的随机值,必须重新初始化该随机值。