Как очистить System.Random seed? - PullRequest
       1

Как очистить System.Random seed?

0 голосов
/ 01 февраля 2019

Я использую функцию System.Random для создания / генерации начального числа для случайных чисел, затем использую Next () для следующих чисел, но так же, как в c ++, «rng» возвращает мне те же результаты случайных чиселкаждый раз.Но в c ++ это было решено очисткой семени в c ++, поэтому мне было интересно, возможно ли это и в c #?

1 Ответ

0 голосов
/ 01 февраля 2019

Скорее всего, вы каждый раз используете новый экземпляр Random.Вы не должны создавать экземпляр new Random(seed_here) повторно.

Random r = new Random(); //Do this once - keep it as a (static if needed) class field 

for (int i = 0; i < 10; i++) {
     Console.WriteLine($"{r.Next()}");
}

Обновление

Вот более сложный пример:

class MyClass
{
    //You should use a better seed, 1234 is here just for the example
    Random r1 = new Random(1234); // You may even make it `static readonly`

    public void BadMethod()
    {
        // new Random everytime we call the method = bad (in most cases)
        Random r2 = new Random(1234); 

        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine($"{i + 1}. {r2.Next()}");
        }
    }

    public void GoodMethod()
    {

        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine($"{i+1}. {r1.Next()}");
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        var m = new MyClass();

        m.BadMethod();
        m.BadMethod();
        m.GoodMethod();
        m.GoodMethod();

    }
}

Вывод

1. 857019877
2. 1923929452
3. 685483091    
1. 857019877  <--- Repeats
2. 1923929452
3. 685483091
1. 857019877
2. 1923929452
3. 685483091
1. 2033103372 <--- Phew! It's a new number
2. 728933312
3. 2037485757
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...