Случайное число в цикле [дубликат]

10
задан Sam 16 June 2010 в 13:47
поделиться

4 ответа

Переместите объявление генератора случайных чисел из цикла.

Генерация случайных чисел начинается со значения затравки. При многократном использовании одной и той же затравки генерируется одна и та же серия чисел. Один из способов получения различных последовательностей - сделать значение затравки зависящим от времени, тем самым создавая различные серии при каждом новом экземпляре Random. По умолчанию конструктор класса Random без параметров использует системные часы для генерации значения затравки, ...

Источник

Имея объявление в цикле, вы фактически вызываете конструктор с одним и тем же значением снова и снова - следовательно, вы получаете одни и те же числа.

Поэтому ваш код должен выглядеть так:

Random r = new Random();
for ...
    string += r.Next(4);
56
ответ дан 3 December 2019 в 13:12
поделиться

Вы должны использовать один и тот же случайный экземпляр повсюду вместо того, чтобы каждый раз создавать новый.

Как у вас есть:

for ...
    Random r = new Random();
    string += r.Next(4);

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

Повторное использование одного экземпляра Random, например:

Random r = new Random()
for ...
    string += r.Next(4);

Каждый раз, когда вы вызываете r.Next (4) , значения обновляются (в основном разные начальные числа для каждого вызова).

2
ответ дан 3 December 2019 в 13:12
поделиться
Random r = new Random(); 
for ... 
    string += r.Next(4); 

new Random() инициализирует (псевдо-)генератор случайных чисел с затравкой, основанной на текущей дате и времени. Таким образом, два экземпляра Random, созданные в одну и ту же дату и время, дадут одну и ту же последовательность чисел.

На каждой итерации вы создавали новый генератор случайных чисел, а затем брали первое значение из этой последовательности. Поскольку генераторы случайных чисел были одинаковыми, первое значение их последовательностей было одинаковым. Мое решение создаст один генератор случайных чисел, а затем вернет первое, второе и т.д... значение последовательности (которые будут разными).

9
ответ дан 3 December 2019 в 13:12
поделиться

Переместите Random r = new Random(); за пределы цикла и просто вызывайте next внутри цикла.

3
ответ дан 3 December 2019 в 13:12
поделиться
Другие вопросы по тегам:

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