Login8
@Login8
Программист, критик, наватор

Почему Random() возвращает одно и тоже значение в C#?

Почему этот код возвращает одно и тоже значение:
Console.WriteLine((new Random()).Next(0, 100));  //  63
	Console.WriteLine((new Random()).Next(0, 100));  //  63


А вот этот разное:

Console.WriteLine((new Random()).Next(0, 100)); // 12
		Thread.Sleep(10);
		Console.WriteLine((new Random()).Next(0, 100)); // 44


Я добавил Thread.Sleep(10); и код заработал как надо.
Кто знает в чем дело?
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Потому что Random генерирует не настоящие случайные числа, а производит определённые операции над сидом.

Если ты сид не передаёшь, то он будет сгенерирован на основе времени.

В твоём случае следовало создать один экземпляр Random и вызывать Next на нём.

Ну и ещё этот класс не потокобезопасен, а по тому, если ты вызовешь Next в двух разных потоках одновременно - ты получишь одно и то же значение
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
читаем документацию ну или минимально гуглим
https://dotnetcoretutorials.com/2021/08/10/generat...
Вообще в любых библиотеках криптографии часто есть правильные псевдорандомные генераторы.
А еще есть аппаратные рандомные генераторы
Ответ написан
Комментировать
используй псевдо рандомный сид для инициализации рандома:
var random = new Random(Guid.NewGuid().GetHashCode());
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы