Почему кажется, что мой генератор случайных чисел не случайный в C #? - PullRequest
19 голосов
/ 31 мая 2009

Я работаю в Microsoft Visual C # 2008 Express.

Я нашел этот фрагмент кода:

    public static int RandomNumber(int min, int max)
    {
        Random random = new Random();

        return random.Next(min, max);
    }

проблема в том, что я запускал его более 100 раз, и он ВСЕГДА дает мне один и тот же ответ, когда мои min = 0 и max = 1. Я получаю 0 каждый раз. (Я создал тестовую функцию для ее запуска - действительно - я получаю 0 каждый раз). Мне трудно поверить, что это совпадение ... Есть ли что-то еще, что я могу сделать, чтобы проверить или проверить это? (Я перезапустил тест с min = 0 и max = 10 и первые 50 раз, результат всегда был «5», 2-й раз 50 раз, результат всегда был «9».

?? Мне нужно что-то более последовательное, случайное ...

-Adeena

Ответы [ 13 ]

0 голосов
/ 26 октября 2010

Я нашел очень простой, но эффективный способ генерирования случайных чисел, просто взяв последние две цифры текущей даты и времени в миллисекундах:

   int seed = Convert.ToInt32(DateTime.Now.Millisecond.ToString().Substring(1, 2));
   int cnr = new Random(seed).Next(100);

Это грубо, но это работает! :-)

Конечно, он будет статистически генерировать одно и то же число каждые сто раз. В качестве альтернативы вы можете взять все три цифры или объединить их с другими значениями даты и времени, такими как секунды или около того.

0 голосов
/ 31 мая 2009

Несколько авторов заявили, что Random () использует начальное число, основанное на текущей секунде на системных часах, и любой другой экземпляр Random, созданный в ту же секунду, будет иметь такое же начальное значение. Это неверно Начальное число для беспараметрического конструктора Random основано на числе тиков или количестве миллисекунд с момента загрузки. Это значение обновляется в большинстве систем примерно каждые 15 миллисекунд, но оно может варьироваться в зависимости от аппаратного обеспечения и настроек системы.

0 голосов
/ 31 мая 2009

в VB я всегда начинаю с функции Randomize (). Просто вызовите Randomize () и запустите вашу случайную функцию. Я также делаю следующее:

Function RandomInt(ByVal lower As Integer, ByVal upper As Integer) As Integer
    Return CInt(Int((upper - lower + 1) * Rnd() + lower))
End Function

Надеюсь, это поможет! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...