Почему этот генератор случайных чисел не случайный?
Возможные дубликаты:
Почему кажется, что мой генератор случайных чисел не случайный в C#?
Генератор случайных чисел работает не так, как я планировал (C#)
У меня есть этот метод для расчета случайного значения:
private double getMetrics(SourceFile sf)
{
Random r = new Random();
return (r.NextDouble());
}
Однако он возвращает всегда один и тот же номер, в моем случае 0.41500350386603
Зачем????
2 ответа
new Random()
использует текущее время в качестве начального значения. Таким образом, если вы вызываете эту функцию несколько раз за очень короткий промежуток времени, она может вернуть одно и то же значение. Вот объяснение из MSDN:
Начальное значение по умолчанию получено из системных часов и имеет конечное разрешение. В результате разные объекты Random, созданные в тесной последовательности при вызове конструктора по умолчанию, будут иметь идентичные начальные значения по умолчанию и, следовательно, будут создавать идентичные наборы случайных чисел. Этой проблемы можно избежать, используя один объект Random для генерации всех случайных чисел.
Просто объявите Random из вашего метода, и каждый раз, когда вы вызываете метод, будут создаваться новые числа, если они не будут удалены и воссозданы. Когда воссоздан, числа будут похожи с начала снова. Вы можете подождать несколько мс, прежде чем создавать случайное число, если хотите "больше" уникальных чисел. Если вы хотите очень уникальные номера, лучше GuID.