2015-12-21 3 views
0

Я собираюсь сгенерировать 100 случайных чисел в цикле for. Единственная проблема заключается в том, что, поскольку метод random() основан на таймере, он будет генерировать одинаковые числа 3-4 раза подряд. Я могу решить эту проблему, включив метод my.sleep() в мой цикл. Поэтому я хочу знать точную частоту обновления метода random(), чтобы я мог сопоставить метод threat.sleep() и не задерживался больше, чем необходимо.Какова частота обновления метода random() в C#

Вот мой код:

for (int i; i <= 100; i += 1) 
{   
    Random rndNum = new Random(); 
    Console.WriteLine(rndNum.Next(1, 100)); 
    Thread.Sleep(X); //I want to know the best value of X (as less delay as possible) 
} 

Благодаря кучу

/HamMan4Ever

+1

Не создавайте 'new Random()' каждую итерацию. Создайте цикл «new Random()' * before *) и повторно используйте его. –

ответ

0

Она равна частоте обновления системных часов, как он использует время в качестве затравки. Но для вашей работы вы должны держать экземпляр Random вне цикла.

Random rndNum = new Random(); 
for (int i; i <= 100; i += 1) 
{   
    Console.WriteLine(rndNum.Next(1, 100)); 
} 

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

+0

Говоря, что частота обновления соответствует системным часам, вводит в заблуждение и передает неверное представление OP о том, что при вызове методов класса 'Random' существует такая вещь, как частота обновления. Нет. – sstan

+0

Пока нет частоты обновления, поскольку она использует системное время, частота обновления будет соответствовать скорости, с которой время обновляется. –

+0

Я не уверен, что у нас есть то же определение * частоты обновления *. – sstan

1

Я никогда не слышал и не читал, что класс Random основан на таймере. Возможно, вы слышали, что это посеяно по системному времени, но после этого каждый звонок Next будет возвращать случайное число, обычно отличающееся от предыдущего. Обычно, когда вы видите неслучайные данные, поступающие с Random, это потому, что вы создаете новый случайный случай на каждой итерации через цикл, как и в коде, который вы использовали. Поскольку каждый из них высевается из системных часов, и вы создаете несколько очень быстро, вы видите повторяющиеся шаблоны. Создайте Random вне цикла, чтобы устранить эту проблему.

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