Класс Random, определенный в библиотеке классов .NET предлагает возможность генерировать числа.
У класса Random есть 3 public метода, позволяющих сгенерировать число тем или иным способом: Next, NextBytes и NextDouble. Next возвращает случайное число, NextBytes возвращает массив байтов заполненный случайнми числами, NextDouble возвращает случайное число в диапазоне от 0.0 до 1.0.
Метод Next существует в 3 перегруженных формах, которые позволяют задать минимальный и максимальный диапазон для генерации случайного числа.
Но класс Random не предоставляет функциональности для генерации строки символов определенной длины. Но у нас есть все средства под рукой для написания подобных методов.
Генерация числа заданной длины
Начнем с генерации числа определенной разрядности. Скажем, к примеру, нам нужно сгенерировать число длиной в 5 символов. Мы можем использовать метод Random.Next с указанием диапазона, к примеру:
Random random = new Random();
random.Next(10000, 99999);
Но если нам каждый раз необходимо генерировать числа различной разрядности, то указанный вариант не очень подходит.Для решения данной задачи создадим метод, который в качестве параметра будет принимать разрядность возвращаемого числа:
public static int RandomInt(int size)
{
Random random = new Random();
int result = 0;
for (int i = 0; i < size; i++)
{
//Генерируем число от 0 до 9, заполняем им разряд.
result = (int)((result * 10) + (random.NextDouble() * 9));
//Целое число не может начинаться с 0, если его разрядность больше 1
if (size > 1 && result == 0)
result++;
}
return result;
}
Вызов данного метода:Console.WriteLine("RandomInt(5): {0}", RandomInt(5));
даст, например, такой результат:RandomInt(5): 73842
Генерация строки заданной длины
Для генерации строки заданной длины немного изменим наш метод RandomInt():
public static string RandomString(int size)
{
StringBuilder builder = new StringBuilder();
Random random = new Random();
char ch;
for (int i = 0; i < size; i++)
{
//Генерируем число являющееся латинским символом в юникоде
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
//Конструируем строку со случайно сгенерированными символами
builder.Append(ch);
}
return builder.ToString();
}
Вызов данного метода:Console.WriteLine("RandomString(5): {0}", RandomString(5));
даст, например, такой результат:RandomString(5): HDYFN
Комментариев нет:
Отправить комментарий