Создайте случайное международное число, которые отличаются от предыдущего выполнения программы

Я использую этот код для генерации случайного числа.

 Random R = new Random(0);
 int Rand = R.Next(7);

но я получаю то же случайное число в каждом выполнении программы.

7
задан 3 March 2010 в 09:02
поделиться

9 ответов

вы должны изменять начальное значение вашего объекта генератора случайных чисел каждый раз, когда вы запускаете свою программу, как я видел из вашего примера, текущее начальное значение 0, поэтому вам нужно изменить его на что-то другое, если вы хотите получить другой поток случайных чисел ... просто мысль!

10
ответ дан 6 December 2019 в 06:49
поделиться

Зарегистрируйте свой (псевдо) -случайный генератор, используя непостоянное значение, например текущее время и дата:

Random R = new Random(DateTime.Now.Ticks);

Подробнее о псевдослучайных генераторах читайте в Википедии .

3
ответ дан 6 December 2019 в 06:49
поделиться

Уберите 0 из конструктора, и вы получите разные случайные числа.

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

Вы можете указать int32, который является случайным, но проще всего просто не передавать никаких параметров, и вы получите seed, основанный на времени

13
ответ дан 6 December 2019 в 06:49
поделиться

Используйте время как начальное значение вашего ГПСЧ.

0
ответ дан 6 December 2019 в 06:49
поделиться

Вам нужно заполнить генератор случайных чисел. Вы можете использовать следующее:

Random R = new Random (DateTime.Now.Millisecond);

int Rand = R.Next (7);

0
ответ дан 6 December 2019 в 06:49
поделиться

Генераторы случайных чисел генерируют новое «случайное» значение на основе предыдущего сгенерированного числа. Начальное значение для этого - семя.

Заполнение одним и тем же значением (например, 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 .

Надеюсь, это проясняет идею, лежащую в основе концепции начального значения случайного числа.

0
ответ дан 6 December 2019 в 06:49
поделиться

Самый безопасный способ сгенерировать случайное число - использовать класс 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

}

0
ответ дан 6 December 2019 в 06:49
поделиться

Вам нужно заполнить класс Random чем-то большим, чем 0. Я обычно использую DataTime.Now.Ticks, или вы можете использовать новое целочисленное значение Guid.

0
ответ дан 6 December 2019 в 06:49
поделиться

если мы хотим получить случайное число от 1 до 100, код будет выглядеть следующим образом: RandomNumberGenerator.GetRandomInt(1, 100)

0
ответ дан 6 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: