5.2. Клас Random і його методи
Клас Random призначений для генерації випадкових чисел. Це нестатичний клас. Він має конструктор класу: для того, щоб викликати методи класу, потрібно спочатку створити екземпляр класу.
Конструктор класу перевизначений і має дві реалізації. Одна з них дозволяє генерувати унікальні серії випадкових чисел. Початковий елемент такої серії будується на основі поточної дати і часу, що гарантує унікальність серії.
Цей конструктор викликається без параметрів. Він описаний як
public Random();
Інший конструктор з параметром –
public Random (int);
забезпечує можливість генерації серії випадкових чисел, що повторюється. Параметр конструктора використовується для побудови початкового елемента серії, тому при завданні одного і того ж значення параметра серія буде повторюватися.
Перегружений метод public int Next(); при кожному виклику повертає позитивне ціле число, рівномірно розподілене в деякому діапазоні. Діапазон задається параметрами методу. Три реалізації методу відрізняються набором параметрів:
public int Next () - метод без параметрів видає цілі позитивні числа у всьому позитивному діапазоні типу int;
public int Next (int max) - видає цілі позитивні числа в діапазоні [0,max];
public int Next (int min, int max) - видає цілі позитивні числа в діапазоні [min,max].
Метод public double NextDouble () має одну реалізацію. При кожному виклику цього методу видається нове випадкове число, рівномірно розподілене в інтервалі [0,1).
Для отримання серії випадкових чисел призначений метод NextBytes, описаний як:
public void NextBytes (byte[] buffer);
Метод має 1 параметр – масив, який заповняється випадковими числами в діапазоні [0, 255]..
Приклад 5.7
public void Rand()
{
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]);
}
}//Rand
В цьому прикладі спочатку створюються два об'єкти класу Random. В цих об'єктів різні конструктори. Об'єкт з ім'ям realRnd дозволяє генерувати серії випадкових чисел, що не повторюються. Об'єкт repeatRnd дає можливість повторити при необхідності серію. Метод NextDouble створює серію випадкових чисел в діапазоні [0, 1). Метод Next, що викликається в циклі з двома параметрами створює серію випадкових негативних цілих, рівномірно розподілених в діапазоні [-100, -10]. Метод NextBytes об'єкту repeatRnd дозволяє отримати при одному виклику масив випадкових чисел з діапазону [0, 255].
Приклад: створення екземпляру класу і генерація числа
Random aRand = new Random(); //створення об’єкту класу
arr[i] = aRand.Next(min_Number1, max_Number1); //генерація випадкового числа у заданому діапазоні.
Приклад 5.8 Генерація масиву чисел і його сортування
class Program
{ // генератор даних
static void ValsGenerator(int[] Vals)
{
// Random - клас для генерації випадкових чисел
Random aRand = new Random();
// заповнення масиву
for (int i = 0; i < Vals.Length; i++)
Vals[i] = aRand.Next(100);
}
static void Main(string[] args)
{
const int N = 10;
int[] Data = new int[N];
ValsGenerator(Data);
Array.Sort(Data);
Console.WriteLine("Друк відсортованих даних");
for (int i = 0; i < Data.Length; i++)
Console.WriteLine("Data[" + i + "] = " + Data[i]);
Console.ReadLine();
}
}
