C# 相同的随机值

C# 相同的随机值,c#,random,C#,Random,可能重复: 我对随机值有问题 int weight = 0; Random random = new Random(); for (int i = 0; i < entriesCount; i++) { weight = random.Next(10); this.weights[i] = weight; } 对于每个对象,我都会得到相同的随机值,例如:4,5 |

可能重复:

我对随机值有问题

        int weight = 0;
        Random random = new Random();
        for (int i = 0; i < entriesCount; i++)
        {
            weight = random.Next(10);
        this.weights[i] = weight;
        }
对于每个对象,我都会得到相同的随机值,例如:4,5 | 4,5 | 4,5

每次我在相同的序列中得到相同的值。我不明白为什么>请帮忙

致以最良好的祝愿,
Dawid是一个伪随机数生成器,这意味着任何给定种子的输出序列都是相同的。如果将种子传递给构造函数,则会得到不同的序列。

问题在于每次都在创建一个新的随机序列。创建Random类的实例时,它将当前时间用作种子。如果快速多次执行此操作,则会得到相同的种子值,因此不同的随机实例会输出相同的结果

为了解决这个问题,您需要确保您的random每次都是唯一的种子,或者共享并使用单个random实例。最简单的方法是将随机实例设置为静态:

class YourClass
{
    private static Random randomGenerator = new Random();

    public YourClass(int entriesCount)
    {
       int weight = 0;
       for (int i = 0; i < entriesCount; i++)
       {
           weight = randomGenerator.Next(10);
           this.weights[i] = weight;
       }
    }
    // .. rest of your class
classyourclass
{
私有静态随机生成器=新随机();
公共类(int entriesCount)
{
整数权重=0;
对于(int i=0;i
这将导致类始终重用相同的随机实例,因此每次都会得到不同的值


请注意,如果要在多线程场景中使用此方法,还必须同步对随机实例的访问,或者提出不同的方法(例如保存种子值,并使用类似Interlocked.Increment的方法来增加它,并从每个实例中种子一个新的随机数,等等).

据我所知,除非您另有指定,否则随机数将按系统时间进行种子设定。它会根据此数字生成数字。当您几乎完全同时创建它们时,它们具有相同的种子,并且几乎总是返回相同的数字和序列

任何简单的解决方法都是创建一个静态随机变量,所有实例共享,只需在该静态对象上调用.Next()


“使用无参数构造函数连续创建不同的随机对象会创建随机数生成器,生成相同的随机数序列。”

请参见此处的说明:这是一些关于该主题的好文章:非常感谢。它非常有效!!
class YourClass
{
    private static Random randomGenerator = new Random();

    public YourClass(int entriesCount)
    {
       int weight = 0;
       for (int i = 0; i < entriesCount; i++)
       {
           weight = randomGenerator.Next(10);
           this.weights[i] = weight;
       }
    }
    // .. rest of your class