C# Language
Генерация случайных чисел в C #
Поиск…
Синтаксис
Random ()
Случайный (int Seed)
int Next ()
int Next (int maxValue)
int Next (int minValue, int maxValue)
параметры
параметры | подробности |
---|---|
семя | Значение для генерации случайных чисел. Если не установлено, значение по умолчанию определяется текущим системным временем. |
MinValue | Сгенерированные числа не будут меньше этого значения. Если значение не установлено, значение по умолчанию равно 0. |
MaxValue | Сгенерированные числа будут меньше этого значения. Если не установлено, значением по умолчанию является Int32.MaxValue . |
возвращаемое значение | Возвращает число со случайным значением. |
замечания
Случайное семя, генерируемое системой, не одинаково в каждом отдельном прогоне.
Семена, сгенерированные в одно и то же время, могут быть одинаковыми.
Создать случайный int
В этом примере генерируются случайные значения от 0 до 2147483647.
Random rnd = new Random();
int randomNumber = rnd.Next();
Создать случайный двойной
Создайте случайное число от 0 до 1.0. (не включая 1.0)
Random rnd = new Random();
var randomDouble = rnd.NextDouble();
Генерировать случайный int в заданном диапазоне
Создайте случайное число между minValue
и maxValue - 1
.
Random rnd = new Random();
var randomBetween10And20 = rnd.Next(10, 20);
Генерирование одной и той же последовательности случайных чисел снова и снова
При создании Random
экземпляров с одним и тем же семенем будут генерироваться одинаковые числа.
int seed = 5;
for (int i = 0; i < 2; i++)
{
Console.WriteLine("Random instance " + i);
Random rnd = new Random(seed);
for (int j = 0; j < 5; j++)
{
Console.Write(rnd.Next());
Console.Write(" ");
}
Console.WriteLine();
}
Выход:
Random instance 0
726643700 610783965 564707973 1342984399 995276750
Random instance 1
726643700 610783965 564707973 1342984399 995276750
Создавать несколько случайных классов с разными семенами одновременно
Два случайных класса, созданные одновременно, будут иметь одинаковое начальное значение.
Использование System.Guid.NewGuid().GetHashCode()
может получить другое семя даже в одно и то же время.
Random rnd1 = new Random();
Random rnd2 = new Random();
Console.WriteLine("First 5 random number in rnd1");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd1.Next());
Console.WriteLine("First 5 random number in rnd2");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd2.Next());
rnd1 = new Random(Guid.NewGuid().GetHashCode());
rnd2 = new Random(Guid.NewGuid().GetHashCode());
Console.WriteLine("First 5 random number in rnd1 using Guid");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd1.Next());
Console.WriteLine("First 5 random number in rnd2 using Guid");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd2.Next());
Другим способом достижения разных семян является использование другого экземпляра Random
для извлечения значений семян.
Random rndSeeds = new Random();
Random rnd1 = new Random(rndSeeds.Next());
Random rnd2 = new Random(rndSeeds.Next());
Это также позволяет контролировать результат всех Random
экземпляров, устанавливая только начальное значение для rndSeeds
. Все остальные экземпляры будут детерминистически получены из этого единственного значения семени.
Создать случайный символ
Создайте случайную букву между a
и z
, используя перегрузку Next()
для заданного диапазона чисел, а затем преобразование полученного int
в char
Random rnd = new Random();
char randomChar = (char)rnd.Next('a','z');
//'a' and 'z' are interpreted as ints for parameters for Next()
Создайте число, которое представляет собой процент от максимального значения
Общей потребностью в случайных числах является генерация числа, которое составляет X%
от некоторого максимального значения. это можно сделать, обработав результат NextDouble()
в процентах:
var rnd = new Random();
var maxValue = 5000;
var percentage = rnd.NextDouble();
var result = maxValue * percentage;
//suppose NextDouble() returns .65, result will hold 65% of 5000: 3250.