Я использую этот код для генерации случайного числа.
Random R = new Random(0);
int Rand = R.Next(7);
но я получаю то же случайное число в каждом выполнении программы.
вы должны изменять начальное значение вашего объекта генератора случайных чисел каждый раз, когда вы запускаете свою программу, как я видел из вашего примера, текущее начальное значение 0, поэтому вам нужно изменить его на что-то другое, если вы хотите получить другой поток случайных чисел ... просто мысль!
Зарегистрируйте свой (псевдо) -случайный генератор, используя непостоянное значение, например текущее время и дата:
Random R = new Random(DateTime.Now.Ticks);
Подробнее о псевдослучайных генераторах читайте в Википедии .
Уберите 0 из конструктора, и вы получите разные случайные числа.
Если вы передаете конструктору число, оно используется в качестве затравки, всегда указывая 0, вы всегда будете получать одну и ту же последовательность.
Вы можете указать int32, который является случайным, но проще всего просто не передавать никаких параметров, и вы получите seed, основанный на времени
Используйте время как начальное значение вашего ГПСЧ.
Вам нужно заполнить генератор случайных чисел. Вы можете использовать следующее:
Random R = new Random (DateTime.Now.Millisecond);
int Rand = R.Next (7);
Генераторы случайных чисел генерируют новое «случайное» значение на основе предыдущего сгенерированного числа. Начальное значение для этого - семя.
Заполнение одним и тем же значением (например, 0 в вашем примере кода) в основном указывает генератору случайных чисел начинать каждый раз с одного и того же числа. Наличие одного и того же случайного числа, генерируемого каждый раз, означает, что ваш код становится перезапускаемым. Пример: Симуляторы используют это, чтобы перезапустить симуляцию с измененными параметрами, но с тем же «набором данных».
Другой пример:
Я хочу каждый день отправлять себе мотивационное сообщение. Иногда сообщения искажаются. Возможность перезапустить скрипт, выдавая одно и то же сообщение снова и снова в течение дня, упрощает решение этой проблемы. В коде Perl это означает:
# By initialising the random generator with the day number since
# the epoch, we get the same quote during one day.
srand(time()/(24*3600));
my $i = int(rand(@messages));
Если вы хотите получать разные числа каждый раз, вам придется установить это начальное число на что-то случайное. Вариантов много, например, время, PID, задержка между двумя нажатиями клавиш пользователем, некоторое значение, полученное из интерфейса Ethernet, и т. Д. Или, что более вероятно, комбинация вышеперечисленного, например time * PID
.
Надеюсь, это проясняет идею, лежащую в основе концепции начального значения случайного числа.
Самый безопасный способ сгенерировать случайное число - использовать класс System.Security.Cryptography.RandomNumberGenerator.
Вот пример, который генерирует число от 1 до 100:
public Number Rand()
{
byte[] Salt = new byte[8];
System.Security.Cryptography.RandomNumberGenerator.Create().GetBytes(Salt);
decimal result = 0;
foreach (byte b in Salt)
{
result = result * 255 + b;
}
while (result > 100)
{
result /= 10;
}
return result
}
Вам нужно заполнить класс Random чем-то большим, чем 0. Я обычно использую DataTime.Now.Ticks, или вы можете использовать новое целочисленное значение Guid.
если мы хотим получить случайное число от 1 до 100, код будет выглядеть следующим образом: RandomNumberGenerator.GetRandomInt(1, 100)