【问题标题】:Why Random generates different numbers in loop?为什么随机在循环中生成不同的数字?
【发布时间】:2022-01-04 02:34:38
【问题描述】:

你好,我想生成随机数,所以我在我的类中创建了方法

        private readonly Random _rand = new Random(); //Private property of class

        public void GenerateRandomNumber()
        {
            //For loop executes 10 times
            for (int i = 1; i < 11; i++)
            {
                Console.WriteLine(_rand.Next(0, 10));
            }
        }

当我从 Main 调用它时,我会创建我的类的新实例,然后调用它。它工作正常,但我想知道为什么每次在 for 循环中以及每次运行程序时都会生成不同的数字?

这对我来说很有趣,因为我知道 Random 可以生成相同的数字,但在我的情况下它会生成不同的数字。

如果我将static 修饰符添加到私有财产,会有什么影响?

【问题讨论】:

  • 看一下文档告诉你,你可以用一个数字为新的 Random 播种,以创建一个可重复的数字序列。
  • 即使是肤浅的搜索也会发现这个非常古老、非常活跃的帖子:Random number generator only generating one random number
  • @ŇɏssaPøngjǣrdenlarp 不太想知道为什么 Random 在我的情况下会产生不同的值。现在我知道为什么了,那是因为我没有将seed 参数传递给构造函数。

标签: c# random console console-application


【解决方案1】:

Random 对象不是生成数字的对象。当调用_rand.Next(0, 10) 时,它会生成一个介于 0 和 9 之间的随机数,这就是为什么您每次都会获得新数字的原因。 See the documentation for Random.Next()。如果只需要一个随机数,则需要在循环外调用此方法并将结果存储在变量中。

【讨论】:

    【解决方案2】:

    C# 中,您的随机数生成器会根据您的系统时钟自动将种子设置为一个值,从而生成伪随机数。如果您希望每次运行程序时随机数的顺序相同,您可以使用以下方法手动设置种子:

    seed = 999
    private readonly Random _rand = new Random(seed)
    

    【讨论】:

    • 谢谢,我认为seed 参数在我测试应用程序时会很有用
    猜你喜欢
    • 2013-10-22
    • 2019-02-05
    • 1970-01-01
    • 2018-06-02
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多