Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

C# случайные числа

#c_sharp


Почему при выполнении данного кода все элементы массива Jarr имеют одинаковую длину,
static void Main(string[] args)
        {
            int[][] Jarr = new int[10][];
            for (int i = 0; i < Jarr.Length; i++)
            {
                Jarr[i] = new int[new Random().Next(10)];
            }
            for (int i = 0; i < Jarr.Length; i++)
            {
                for (int j = 0; j < Jarr[i].Length; j++)
                {
                    Console.Write("{0} ",Jarr[i][j]);
                }
                Console.WriteLine();
            }
        }

а при выполнении этого разную?
static void Main(string[] args)
        {
            int[][] Jarr = new int[10][];
            Random rand = new Random();
            for (int i = 0; i < Jarr.Length; i++)
            {
                Jarr[i] = new int[rand.Next(10)];
            }
            for (int i = 0; i < Jarr.Length; i++)
            {
                for (int j = 0; j < Jarr[i].Length; j++)
                {
                    Console.Write("{0} ",Jarr[i][j]);
                }
                Console.WriteLine();
            }
        }
    }
    


Ответы

Ответ 1



В первом случае вы создаете новый экземпляр Random на каждой итерации, который инициализируется системным временем. Системные часы не успевают обновить свое значение за время выполнения цикла, поэтому все экземляры Random инициализируются одним и тем же начальным значением ‒ оно и возвращается. Иными словами, каждый раз выбирается первое значение одной и той же псевдослучайной последовательности. Во втором случае вы используете один экземпляр Random и генерируете последовательность псевдослучайных чисел, в которой каждое число встречается равновероятно (почти). Из MSDN: The default seed value is derived from the system clock and has finite resolution. As a result, different Random objects that are created in close succession by a call to the default constructor will have identical default seed values and, therefore, will produce identical sets of random numbers.

Комментариев нет:

Отправить комментарий