Как да генерираме случайни числа в C#
Случайните числа се използват широко в цифровите игри, статистическите извадки, криптографията, изчисленията в статистическата физика, числения анализ, радиокомуникациите и казино игрите като рулетка и др
Можем да използваме класа Random
за генериране на случайни числа в C#.
Какво представлява класът C# Random
?
C# Random
класът е генератор на псевдослучайни числа, който представлява алгоритъм, генериращ последователност от числа, отговарящи на определени статистически изисквания за случайност.
Този клас има 5 метода: Next()
, NextInt64()
,NextBytes()
, NextDouble()
и NextSingle()
В зависимост от вида на числото, т.е. int
,long
и т.н., можем да използваме съответния метод.
Нека разгледаме примерите, за да ги разберем по-подробно
Генериране на случайно цяло число на C#
Стъпки за генериране на произволно цяло число в C#
- Инстанцирайте класа за случайни числа.
- Използвайте метода
Random.Next()
, за да върнете случайно цяло число междуInt32.MinValue
иInt32.MaxValue
.
var randomInteger = new Random();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
/* OUTPUT :
2027076668
1095111085
535874255
1973884472
430547700
*/
Генериране на случайно цяло число между минималната и максималната стойност
Random.Next()
има претоварен метод, който приема минимални и максимални стойности като параметри и генерира произволно цяло число между зададените стойности.
За да генерирате случайни числа между 100 и 1000, използвайте следния код
Console.WriteLine("Five random integers between 100 and 1000");
for (int counter = 0; counter <= 4; counter++)
Console.WriteLine("{0}", randomNumber.Next(100, 1000));
/* OUTPUT:
Five random integers between 100 and 1000
904
853
554
290
614
*/
Генериране на случайно дълго число(Int64) в C#
За да генерирате случайно дълго число, т.е. Int64
в C#, използвайте метода Random.NextInt64()
, който връща случайно число Int64
между Int64.MinValue
и Int64.MaxValue
.
var RandomInt64 = new Random();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
/* OUTPUT :
5200810282391000059
6501337495320049889
6318562423063201438
3733878081804548122
8421209223603063849
*/
Генериране на случайно дълго число(Int64) в даден диапазон
Подобно на Random.Next()
, Random.NextInt64()
има претоварен метод, който приема Range, т.е. минимална и максимална стойност като параметри, и връща случайно Int64
число между тях.
За да генерирате случайни числа между 100000 и 200000, използвайте следния код
var RandomInt64 = new Random();
Console.WriteLine("Five random integers between 100000 and 200000");
for (int counter = 0; counter <= 4; counter++)
Console.WriteLine("{0}", RandomInt64.NextInt64(100000, 200000));
/* OUTPUT:
Five random long Int64 numbers between 100000 and 200000
144220
194475
185075
159433
136542
*/
Генерираните случайни числа не са напълно случайни, тъй като за избора им се използва математически алгоритъм, но те са достатъчно добри за повечето случаи в реалния свят.
Избягване на дублирания при генериране на случайни числа
Ако инициализирате повече от един клас new Random()
Може да се получат дублиращи се случайни числа. (Многонишково приложение)
var randomOne = new Random();
var randomTwo = new Random(); // Don't do this
Затова е по-добре да инициализирате само една инстанция на класа Random()
и да я използвате в цялото приложение.
//Function to generate unique random number using `Random()` class
private static readonly Random randomInstance = new Random();
public static int GenerateRandomNumber(int min, int max)
{
lock(randomInstance) // synchronize
{
return randomInstance.Next(min, max);
}
}
Ако искате да генерирате поредица от случайни числа в многонишкова среда, използвайте горния метод.
Използване на криптографски C# RandomNumberGenerator
Ако искате да генерирате наистина уникални случайни числа, можете да използвате класа RandomNumberGenerator
, който е част от библиотеката System.Security.Cryptography
.
Този клас генерира криптографски сигурни случайни числа и е подходящ за създаване на случайна парола.
var randomNumber= RandomNumberGenerator.GetInt32(Int32.MaxValue);
Можем също така да подадем диапазон на метода RandomNumberGenerator
.
var randomNumber= RandomNumberGenerator.GetInt32(2000,5000);
Използване на класа C# RNGCryptoServiceProvider
Този клас вече е остарял, не използвайте този метод.
RNGCryptoServiceProvider
имплементира криптографски генератор на случайни числа (RNG), като използва реализацията, предоставена от доставчика на криптографски услуги (CSP).
Използвайте кода по-долу, за да създадете случайно число с помощта на класа C# RNGCryptoServiceProvider
.
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
byte[] randomNumber = new byte[4];//4 for int32
rng.GetBytes(randomNumber);
int value = BitConverter.ToInt32(randomNumber, 0);
}
Обобщение
В този урок научихме различни начини за генериране на случайни числа в C# с прости примери.