Давайте подумаем о включенных шагах.
- Запросим у пользователя число
- Поместите ответ в переменную.
- Создайте случайную строку с nсимволы
Похоже, вы позаботились о 1 и 2. Теперь давайте разберем номер 3 на задачи.Какие символы вы хотите включить.Заглавные буквы?Строчные буквы?Числа?Пунктуация?Таблица ASCII сообщит вам, что есть читаемые символы от ASCII 33 до 126. Если вы спросите случайное число в диапазоне от 33 до 126, то измените его на символ, который он представляет, это будет начало.
К счастью .net предоставляет класс Random.Сначала нам нужно получить экземпляр этого класса, чтобы использовать его методы.Private rnd As New Random
Теперь у нас есть переменная, содержащая экземпляр случайного класса, поэтому мы можем использовать любые из классифицированных свойств и методов.Есть метод .Next(Int32, Int32)
, который будет производить случайное число в диапазоне.Первый параметр - это нижнее число в диапазоне, а второй - на единицу больше, чем верхнее число.Возвращаясь к таблице ASCII, нам нужно случайное число, подобное этому rnd.Next(33, 125)
Далее нам нужно изменить результат на символ.Convert.ToChar(Ascii number)
Следующая проблема - получить количество символов, которое запрашивал пользователь.Помните п.Мы можем сделать это в цикле For ... Next.
Внутри цикла мы хотим построить строку с этими случайными символами.Это можно сделать с помощью амперсанда равных, но каждый раз, когда вы изменяете строку, компилятор должен выбросить старую строку и создать совершенно новую, потому что строки неизменяемы.Для решения этой проблемы .net предоставил класс StringBuilder.Мы создаем экземпляр этого класса и затем используем метод .Append для добавления символов в sb.
После цикла мы меняем StringBuilder на обычную строку и возвращаем его в код вызова.
Public Sub Main()
Console.WriteLine("How many characters do you want in your password?
(up to 20 allowed)")
Dim n As Integer = CInt(Console.ReadLine())
Dim Pword As String = GetRandomString(n)
Console.WriteLine(Pword)
End Sub
Private rnd As New Random
Private Function GetRandomString(stringLength As Integer) As String
Dim sb As New StringBuilder
For c = 1 To stringLength
Dim newAscii = rnd.Next(33, 127)
Dim newChr = Convert.ToChar(newAscii)
sb.Append(newChr)
Next
Return sb.ToString
End Function
В реальном приложении вам нужно будет проверить, ввел ли пользователь правильный номер,Integer.TryParse и проверка на 0, вероятно, сделают это.