Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_po_C_NEW.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
688.13 Кб
Скачать

Класс Random

Умение генерировать случайные числа требуется во многих приложениях. Класс Random содержит все необходимые для этого средства. Класс Random имеет конструктор класса: для того, чтобы вызывать методы класса, необходимо сначала создавать экземпляр (объект) класса. Созданный объект обеспечивает получение чисел.

Класс Random является наследником класса Object, а, следовательно, имеет в своём составе и методы родителя. Рассмотрим часть оригинальных методов класса Random, используемых для генерирования последовательностей случайных чисел.

Начнём рассмотрение с конструктора класса. Конструктор обеспечивает создание объектов класса. Он имеет две реализации. Одна из них позволяет генерировать неповторяющиеся при каждом запуске серии случайных чисел. Начальный элемент такой серии строится на основе текущей даты и времени, что гарантирует уникальность серии. Этот конструктор вызывается без параметров. Он описан как Random(). Другой конструктор с параметром целого типа – Random(int) обеспечивает важную возможность генерирования повторяющейся серии случайных чисел. Параметр конструктора используется для построения начального элемента серии, поэтому при задании одного и того же значения параметра серия будет повторяться.

Перегруженный метод Next() при каждом вызове возвращает положительное целое, равномерно распределённое в некотором диапазоне. Диапазон задаётся параметрами метода. Три реализации метода отличаются набором параметров:

  1. Next () – метод без параметров выдаёт целые положительные числа во всём положительном диапазоне типа int;

  2. Next (max) – выдаёт целые положительные числа в диапазоне [0, max];

  3. Next (min, max) – выдаёт целые положительные числа в диапазоне [min, max].

Метод NextDouble() имеет одну реализацию. При каждом вызове этого метода выдаётся новое случайное число, равномерно распределённое в интервале [0, 1].

Ещё один полезный метод класса Random позволяет при одном обращении получать целую серию случайных чисел. Метод имеет параметр – массив, который и будет заполнен случайными числами. Метод описан как NextBytes(buffer). Так как параметр buffer представляет массив байтов, то, естественно, генерированные случайные числа находятся в диапазоне [0, 255].

Рассмотрим пример работы со случайными числами:

static void Main(string[] args)

{

const int initRnd = 77;

Random realRnd = new Random();

Random repeatRnd = new Random(initRnd);

// Случайные числа в диапазоне [0, 1)

Console.WriteLine("случайные числа в диапазоне[0,1)");

for(int i = 1; i <= 5; i++)

{

Console.WriteLine("Число " + i + "=" + realRnd.NextDouble());

}

//Случайные числа в диапазоне [min, max]

int min = -100, max = -10;

Console.WriteLine("случайные числа в диапазоне [" + min +"," + max + "]");

for(int i = 1; i <= 5; i++)

{

Console.WriteLine("Число " + i + "=" + realRnd.Next(min, max));

}

//Случайный массив байтов

byte[] bar = new byte[10];

repeatRnd.NextBytes(bar);

Console.WriteLine("Массив случайных чисел в диапазоне [0, 255]");

for(int i = 0; i < 10; i++)

{

Console.WriteLine("Число " + i + "= " +bar[i]);

}

}

Сначала создаются два объекта класса Random. У этих объектов разные конструкторы. Объект с именем realRnd позволяет генерировать неповторяющиеся серии случайных чисел. Объект repeatRnd даёт возможность повторить при необходимости серию. Метод NextDouble создаёт серию случайных чисел в диапазоне [0, 1]. Вызываемый в цикле метод Next с двумя параметрами создаёт серию случайных отрицательных целых, равномерно распределённых в диапазоне [-100, -10]. Метод NextBytes объекта repeatRnd позволяет получить при одном вызове массив случайных чисел из диапазона [0, 255].