Возможные Дубликаты:
c# - getting the same random number repeatedly
Random number generator not working the way I had planned (C#)Генерация случайных чисел - то же число возвращается
У меня есть метод, который строит очередь Интс:
public Queue<int> generateTrainingInts(int count = 60)
{
Queue<int> retval = new Queue<int>();
for (int i = 0; i < count; i++)
{
retval.Enqueue(JE_Rand.rInt(2001, 100));
}
return retval;
}
JE_Rand .rInt() - это просто функция, которую делегат эс в зависимости от случайного класса:
public static int rInt(int exclUB, int incLB = 0)
{
Random rand = new Random(DateTime.Now.Millisecond);
int t = rand.Next(incLB, exclUB);
rand = null;
return t;
}
Но когда я называю generateTrainingInts, то же число помещён каждый раз. Однако, если я изменяю rInt на использование статического экземпляра класса Random, вместо локального экземпляра (с областью действия, как это определено выше), то он работает корректно (enqueue random integers). Кто-нибудь знает, почему это происходит?
Редактировать: Дорогой Ответчик, который не прочитал мой вопрос полностью, Как некоторые из вас указали, я ищу хорошее объяснение, почему это происходит. Я не ищу решение проблемы с тем же номером, потому что я уже исправил это, как я сказал выше. Спасибо за ваш энтузиазм, хотя :) Я просто хочу понять такие вещи, потому что моя первая реализация поняла мне концептуально.
Кажется дублируют ... Посмотрите на realted вопросы, как -http: //stackoverflow.com/questions/1437825/random-number-generation-in-c –
Это происходит потому, что объект 'Random' инициализируется из 'окружающей среды.GetTickCount', который является миллисекундным таймером. Поэтому, если вы дважды вызываете конструктор «Случайный» в течение одной миллисекунды, вы получите то же начальное значение. –
Когда rand создается с тем же самым семенем (например, DateTime.Now.Millisecond в вашем случае), он возвращает те же последовательности значений. Вы должны создать экземпляр его один раз (и сохранить его в статической переменной) или с разными семенами каждый раз. – AFract