【问题标题】:C# - Random number with seedC# - 带有种子的随机数
【发布时间】:2017-01-25 02:17:31
【问题描述】:

我有这个代码:

var rand = new Random(0);
for(int i = 0; i < 100; i++)
{
  Console.WriteLine(rand.Next(0, 100));
}

程序应该给我 100 倍相同的数字(因为种子是相同的),但它给出不同的数字...
为什么?

编辑:
我什么时候做

for(int i = 0; i < 100; i++)
{
  Console.WriteLine(new Random(0).Next);
}

每次都返回相同的数字。这意味着,种子正在改变?如果是,如何?增加了吗?

【问题讨论】:

  • 接下来让随机数生成器生成一个新的随机数。在您的示例中,您播种一次并调用 100 Next();
  • 种子就是……种子——算法是如何初始化的。 Next 会给你不同的数字,但这个序列与使用相同种子的新随机数相同
  • 如果你想要 100 次相同的数字,那么为什么要使用 Random
  • 是的 - 您获得的 100 个数字将是“随机的”,但每次您从同一个种子开始时它们都会匹配。不是 x 重复 100 次,而是每次运行 For/Next 时都重复 x(1)-x(100)
  • var rand = new Random(0); 移动到for 块中,您会看到每次调用都会产生相同的数字。

标签: c# random random-seed


【解决方案1】:

它不应该给你 100 个相同的数字,但它应该给你每次重新启动应用程序时完全相同的 100 个数字。

种子用于使随机可预测。想象一下多人游戏,你想要一些随机的东西。但是你要确保这个随机对于每个玩家/客户端的行为都是一样的。 seed 是这里的路。

【讨论】:

  • 种子在增加还是什么?
  • Seed 定义了将要生成的随机数序列。为相同的种子生成相同的序列。
  • 好的,我明白了。感谢您的帮助
  • @TheChilliPL 它不应该,基本上;虽然这不是一个严格的保证。除非您使用原始种子创建一个新的Random,否则它应该重新启动并不是一个内在的期望
  • 我还有一个问题 - 我可以从种子中找到第 n 个随机数吗?
猜你喜欢
  • 2011-04-04
  • 1970-01-01
  • 2014-10-03
  • 2011-09-06
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
相关资源
最近更新 更多