Класс Random — еще один полезный класс, ориентированный на работу с числами. Его назначение — генерация последовательности псевдослучайных целых или вещественных чисел, равномерно распределенных в некотором диапазоне. Такие последовательности чисел бывают необходимы при тестовых испытаниях и в некоторых методах оптимизации.
Класс использует некоторое начальное число в качестве базового значения, применяет к нему алгоритм перемешивания разрядов и полученное таким образом число возвращает как очередное случайное число, при этом оно одновременно становится базовым для выработки следующего случайного числа. Таким образом, на самом деле вырабатывается последовательность псевдослучайных чисел, так как каждое очередное число полностью определяется начальным значением и алгоритмом перемешивания. Однако свойства этой последовательности вполне достаточны для большинства практических применений.
Класс имеет два конструктора: умалчиваемый без параметров и перегруженный с параметром int. Первый в качестве начального значения принимает текущую дату и время, второй — параметр обращения. Таким образом, первый конструктор создает неповторяющиеся серии чисел, а второй может создавать одинаковые серии.
Замечу, что методы класса не являются статическими, поэтому для их использования обязательно создается объект класса. Эти методы перечислены в табл. 5.3.
Таблица 5.3. Некоторые методы класса Random
Метод
Описание
public virtual int Next();
Возвращает очередное псевдослучайное число. В перегруженных вариантах метода можно указывать максимальное значение генерируемых чисел или диапазон их значений
public virtual void NextBytes (byte[] buffer);
Заполняет переменную buffer байтами с псевдослучайными значениям
public virtual double NextDouble();
Возвращает вещественное псевдослучайное число в диапазоне от 0.0 до 1.0
В листинге 5.4 представлена программа, в которой иллюстрируется техника работы с классом Random (файл Ch05\RandomTest\Program.cs).
Листинг 5.4. Работа с классом Random
using System;
using System.Collections.Generic;
using System.Text;
namespace RandomTest
{
class Program
{
static void Main()
{
Random rnd1 = new Random();
Console.Write("rnd1 = new Random():");
for (int i = 1; i <= 5; i++)
Console.Write(" " + rnd1.Next().ToString());
Console.WriteLine();
Console.Write("rnd2 = new Random():");
Random rnd2 = new Random();
for (int i = 1; i <= 5; i++)
Console.Write(" " + rnd2.Next().ToString());
Console.WriteLine();
Random rnd3 = new Random(1);
Console.Write("rnd3 = new Random(1):");
for (int i = 1; i <= 5; i++)
Console.Write(" " + rnd3.Next().ToString());
Console.WriteLine();
Random rnd4 = new Random(1);
Console.Write("rnd4 = new Random(1):");
for (int i = 1; i <= 5; i++)
Console.Write(" " + rnd4.Next().ToString());
Console.WriteLine();
Console.ReadLine();
}
}
}
В программе создается четыре генератора Random: два первых инициализируются текущими датой и временем, поэтому порождают разные последовательности; третий и четвертый генератор инициализируются одинаковым целым числом и порождают разные последовательности псевдослучайных чисел.
0 коммент.:
Отправить комментарий