none
Вопрос по циклу RRS feed

  • Вопрос

  • Доброго времени суток! Возник вопрос. Вопрос на уровне эллементарного, но я застрял... т.к. новичок в программировании.

    for (int i = 0; i < 3; i++)
                {
                    Random Rand = new Random();
                    int R= Rand.Next(1, 4);
                    if (R == 1)
                    {
                        Console.WriteLine(1);
                    }
                    else if (R == 2)
                    {
                        Console.WriteLine(2);
                    }
                    else
                    {
                        Console.WriteLine(3);
                    }

    Как я думал до этого, при одном шаге цикла код воспроизводится по новому, т.е. по новому создается объект Rand, по новому создается переменная R.

    Но на практике цикл выводит 3 строки с одинаковым результатом. Например: 111, 222, 333.

    Как правильно написать, чтобы каждая строка генерировала таки случайное число в заданном диапазоне? За ранее спасибо!

    24 сентября 2015 г. 19:41

Ответы

  • Генератор псевдослучайных чисел, как правило инициализируется текущим временем. Если очень часто создавать новые объекты Random, то все они будут проинициализированы одним и тем же значением и, соответственно, Вы получите одну и ту же последовательность чисел.

    Необходимо вынести конструктор Random за пределы цикла, тогда на каждой итерации получите новое значение.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Предложено в качестве ответа Liliya Muray 24 сентября 2015 г. 21:15
    • Отменено предложение в качестве ответа IMykytiv 25 сентября 2015 г. 17:22
    • Предложено в качестве ответа AlexFV 25 сентября 2015 г. 17:32
    • Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 5 октября 2015 г. 7:13
    24 сентября 2015 г. 20:18

Все ответы

  • Генератор псевдослучайных чисел, как правило инициализируется текущим временем. Если очень часто создавать новые объекты Random, то все они будут проинициализированы одним и тем же значением и, соответственно, Вы получите одну и ту же последовательность чисел.

    Необходимо вынести конструктор Random за пределы цикла, тогда на каждой итерации получите новое значение.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Предложено в качестве ответа Liliya Muray 24 сентября 2015 г. 21:15
    • Отменено предложение в качестве ответа IMykytiv 25 сентября 2015 г. 17:22
    • Предложено в качестве ответа AlexFV 25 сентября 2015 г. 17:32
    • Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 5 октября 2015 г. 7:13
    24 сентября 2015 г. 20:18
  • Спасибо!
    25 сентября 2015 г. 17:22