System.Random выдает одно и то же случайное число - PullRequest
6 голосов
/ 26 мая 2019

Несмотря на то, что генератор случайных чисел создается только один раз, выходные данные всегда являются одинаковыми случайными результатами (для всех трех тестовых выходов).

Тестовый фрагмент от чуть большего скрипта:

   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 ]

12 голосов
/ 26 мая 2019

Ваш getRandomObject является значением. Это оценивается один раз. Чтобы это исправить, сделайте getRandomObject функцией:

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

и назовите это так: getRandomObject ()

4 голосов
/ 26 мая 2019

Это работает для меня:

   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())

0 голосов
/ 26 мая 2019

Вы сгенерировали случайное число один раз, которое не меняется на протяжении всей программы. Чтобы иметь новое случайное значение после каждого использования, необходимо повторно инициализировать случайное значение.

...