random int



Автор Amangeldi Anaklychew задал вопрос в разделе Другие языки и технологии

проблема с random() c# и получил лучший ответ

Ответ от ...[гуру]
Потому, что Random не даёт случайные значения, а даёт псевдослучайные (формулой).
Цитата из MSDN:
Начальное значение по умолчанию извлекается из системных часов, которые обладают конечной разрешающей способностью. Вследствие этого различные объекты Random, создаваемые в закрытой последовательности путем вызова конструктора по умолчанию, будут обладать одинаковым начальным значением по умолчанию и, как результат, будут производить идентичные наборы случайных чисел. Эту проблему можно устранить, используя единый объект Random для генерации всех случайных чисел. Можно также обойти его, изменив начальное значение, возвращенное системным часами, а затем явно предоставив это новое начальное значение конструктору Random(Int32). Дополнительные сведения см. в описании конструктора Random(Int32).
Т. к. функция вызывается очень часто и быстро а Вы его каждый раз создаете (new Random) => переинициализируете и генератору нехватает "точности".
Решений 3:
1 - Вынести Random за функции или передавать его как параметр
2 - Генерировать seed вручную
3 - Thread.Sleep (чтобы таймер успел "сдвинуться")
Подробнее:
1:
class Program
{
private static Random t = new Random();
public static int slu(int e, int u)
{
int y = t.Next(e, u + 1);
return y;
}
static void Main()
{
for(int i=0; i<10; i++) {
Console.WriteLine(slu(-3,3));
}
}
}
2:
class Program
{
public static int slu(int e, int u)
{
Random t = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);
int y = t.Next(e, u + 1);
return y;
}
static void Main()
{
for(int i=0; i<10; i++) {
Console.WriteLine(slu(-3,3));
}
}
}
3:
class Program
{
public static int slu(int e, int u)
{
Random t = new Random();
System.Threading.Thread.Sleep(10);
int y = t.Next(e, u + 1);
return y;
}
static void Main()
{
for(int i=0; i<10; i++) {
Console.WriteLine(slu(-3,3));
}
}
}
P.S: Не вижу смысла в функции slu.
...
Просветленный
(44357)
Какой?
Лучше не увлекаться заменой стандартных функий на свои - это приводит к спагетти-коду и к усложненному разбору.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: проблема с random() c#
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*