奇怪的随机行为

时间:2019-05-02 11:38:00

标签: c# random

请考虑以下内容:

SomeObject o1 = new SomeObject("obj 1");
SomeObject o2 = new SomeObject("obj 2");

for (int i = 0; i < 10; i++)
{
     o1.Method();
     o2.Method();
}

位置:

public class SomeObject
{
    string name;
    public SomeObject(string name)
    {
        this.name = name;
    }
    public void Method()
    {
        Console.WriteLine($"{name}:  {new Random().Next(1, 101)}");
    }
}

输出:

  

obj 1:99

     

obj 2:99

     

obj 1:99

     

obj 2:99

     

obj 1:99

     

obj 2:99

     

obj 1:99

     

obj 2:99

     

obj 1:99

     

obj 2:99

那看起来不像是随机数

2 个答案:

答案 0 :(得分:1)

您需要创建一次Random,然后多次使用。

赞:

SomeObject o1 = new SomeObject("obj 1");
SomeObject o2 = new SomeObject("obj 2");
var random = new Random();

for (int i = 0; i < 10; i++)
{
    o1.Method(random);
    o2.Method(random);
}    

使用此类:

public class SomeObject
{
    string name;
    public SomeObject(string name)
    {
        this.name = name;
    }

    public void Method(Random random)
    {
        Console.WriteLine($"{name}:  {random.Next(1, 101)}");
    }
}

或者您可以在构造函数中传递Random实例。重要的是:数字只是同一实例中的“随机”。

答案 1 :(得分:0)

  

如果将相同的种子用于单独的Random对象,则它们将生成相同的一系列随机数。

种子是起始值。

Docs