Случайный. Следующие возвраты всегда те же значения [дубликат]

Я просто использую Scite. Введите что-то и нажмите f5 для наблюдения результатов.

59
задан tvanfosson 31 October 2009 в 18:58
поделиться

4 ответа

Проблема в том, что вы создаете экземпляры класса Random слишком близко по времени.

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

Создайте один объект Random и передайте его ссылку конструктору, когда вы создавать экземпляры класса «a» вместо создания одного Random объекта для каждого экземпляра «a».

121
ответ дан 24 November 2019 в 18:11
поделиться

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

A Лучшим подходом было бы создать один экземпляр и передать его вашему методу Count .

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

MSDN содержит подробную информацию об этом, но в основном ваша проблема заключается в использовании метода Random.Next , который генерирует:

32-битное целое число со знаком, которое больше или равно minValue и меньше maxValue. ; то есть диапазон возвращаемых значений включает minValue, но не maxValue. Если minValue равно maxValue, возвращается minValue.

из-за этого ваши вызовы вернут -1 или 0.

9
ответ дан 24 November 2019 в 18:11
поделиться

Используйте один статический генератор случайных чисел для всех экземпляров класса.

class a
{
  private static Random rnd;
  static a() {
      rnd = new Random();
  }
  private void Count()
  {
    int r1 = rnd.Next(-1, 2);
    int r2 = rnd.Next(-1, 2);
  }
}

Обратите внимание на изменение, которое дает вам числа в диапазоне -1,1, а не -1,0

9
ответ дан 24 November 2019 в 18:11
поделиться

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

5
ответ дан 24 November 2019 в 18:11
поделиться
Другие вопросы по тегам:

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