2010-10-08 4 views
1

Можно создать дубликат:
Why does it appear that my random number generator isn't random in C#?Проблема в генерации случайного числа

Дорогие друзья

Я хочу, чтобы генерировать 4 случайное число между 1 - 55, но проблема в том, что большинство я получаю 2 числа :(например, сгенерированное число - 2 2 5 9 или 11 11 22 22! Я не знаю почему? Я использую:

Random random = new Random(); 
return random.Next(min, max); 

для создания моего случайного числа. Я помещал их в «В» для повторения 4 раза. Любая идея? Помогла бы мне плз?

+1

Не воссоздавайте объект 'random' - повторно используйте один экземпляр. См. [Почему кажется, что мой генератор случайных чисел не является случайным в C#?] (Http://stackoverflow.com/questions/932520/why-does-it-appear-that-my-random-number-generator- isnt-random-in-c) –

+0

В этом проблема со случайностью: вы никогда не можете быть уверены, что это необычно «неслучайно» или по-настоящему случайным. – rovaughn

ответ

4

Вы должны создать только один объект Random() и повторно использовать его вместо создания нового для каждого произвольного числа, которое вы создаете.

Причина в том, что каждый раз, когда вы создаете новый случайный объект, он семян сам из текущего времени. Если вы создадите несколько случайных объектов за короткий промежуток времени, тогда они будут засеяться в одно и то же время, и поэтому они будут генерировать одинаковые числа.

0

Когда вы создаете new Random() без указания семени, он засекает его с использованием текущего системного времени.

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

Создайте один new Random() и позвоните по телефону .Next(min, max) на нем неоднократно.

Смежные вопросы