C# — случайное число с начальным числом

У меня есть этот код:

var rand = new Random(0);
for(int i = 0; i < 100; i++)
{
  Console.WriteLine(rand.Next(0, 100));
}

И программа должна дать мне 100 раз одно и то же число (потому что сид один и тот же), но выдает разные числа...
Почему?

Изменить:
Когда я это сделаю

for(int i = 0; i < 100; i++)
{
  Console.WriteLine(new Random(0).Next);
}

Это возвращает одно и то же число каждый раз. Что значит, семя меняется? Если да, то как? Он увеличивается?


person TheChilliPL    schedule 16.09.2016    source источник
comment
Далее работает генератор случайных чисел для создания нового случайного числа. В вашем примере вы задаете один раз и вызываете 100 Next();   -  person Shannon Holsinger    schedule 16.09.2016
comment
Семя - это просто... семя - как инициализируется алгоритм. Next даст вам разные числа, но эта последовательность будет такой же, если использовать новый рандом с тем же начальным числом.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 16.09.2016
comment
Если вам нужно в 100 раз одно и то же число, то зачем использовать класс Random   -  person Mrinal Kamboj    schedule 16.09.2016
comment
Да, 100 номеров, которые вы получите, будут случайными, но они будут совпадать каждый раз, когда вы начинаете с одного и того же семени. Не x повторяется 100 раз, а x(1)-x(100) повторяется каждый раз при запуске For/Next   -  person Shannon Holsinger    schedule 16.09.2016
comment
Переместите var rand = new Random(0); в блок for, и вы увидите, что при каждом вызове создается одно и то же число.   -  person Igor    schedule 16.09.2016
comment
Возможный дубликат Генератор случайных чисел генерирует только одно случайное число   -  person Igor    schedule 16.09.2016
comment
(о вашем последнем редактировании) Как это изменит семя? Вы жестко запрограммировали 0 в конструкторе?? Если вы хотите, чтобы это было как можно более случайным, ничего не передавайте, системные часы предоставят значение.   -  person Igor    schedule 16.09.2016
comment
ПОСЛЕ РЕДАКЦИИ: потому что вы вызываете NEXT только один раз во втором примере - вы повторно заполняете каждый цикл   -  person Shannon Holsinger    schedule 16.09.2016
comment
Первый пример: 1 семя рядом*100 второй пример 100 семян рядом*1 каждое семя   -  person Shannon Holsinger    schedule 16.09.2016
comment
Как генерируется следующее семя?   -  person TheChilliPL    schedule 16.09.2016
comment
Вам действительно следует прочитать документацию: System. Случайно   -  person Igor    schedule 16.09.2016
comment
Это обычно путают наоборот.   -  person IS4    schedule 17.09.2016


Ответы (1)


Он не должен давать вам 100 одинаковых номеров, но он должен давать вам точно такие же 100 номеров каждый раз, когда вы перезапускаете приложение.

Семя используется, чтобы сделать случайное предсказуемым. Представьте себе многопользовательскую игру, в которой вы хотите, чтобы что-то было случайным. Но вы хотите убедиться, что этот рандом ведет себя одинаково для каждого игрока/клиента. И seed это путь сюда.

person serhiyb    schedule 16.09.2016
comment
Семя увеличивается или что? - person TheChilliPL; 16.09.2016
comment
Seed определяет последовательность случайных чисел, которые будут сгенерированы. Одна и та же последовательность генерируется для одного и того же начального числа. - person serhiyb; 16.09.2016
comment
Хорошо я понял. Спасибо за помощь - person TheChilliPL; 16.09.2016
comment
У меня последний вопрос - эта последовательность повторяема или бесконечна? Я имею в виду, что если я буду вызывать Next(0, 100) много раз, будет ли последовательность повторяться с самого начала? (Извините за мой английский) - person TheChilliPL; 16.09.2016
comment
@TheChilliPL в принципе не должно; хотя это не строгая гарантия. Это не встроенное ожидание, что он должен перезапуститься, если вы не создадите новый Random с исходным начальным числом. - person Marc Gravell; 16.09.2016
comment
Спасибо за помощь :) - person TheChilliPL; 16.09.2016
comment
У меня есть еще один вопрос - могу ли я найти n-е случайное число из семени? - person TheChilliPL; 25.01.2017