Несоответствия в переменных цикла Loop - PullRequest
0 голосов
/ 12 февраля 2019

Я нахожусь в процессе написания простой программы шифрования / дешифрования и столкнулся с небольшой проблемой.Все персонажи генерируют разные строки символов, чтобы однозначно идентифицировать их.Эти строки должны быть одинаковой длины, но, похоже, они не одинаковы.Код в вопросе: (Полный код можно посмотреть здесь )

Dim genLength As Integer = 0
Dim charNow As Integer = 0
Dim charGenned As String

Dim rndGend As Integer = 0

While genLength < enhancedMode
        fs.Write(arrayAll(charNow))
        Dim rndString As String = ""
        While rndGend < encLength
            Randomize()
            Dim genned As Integer = CInt(Math.Ceiling(Rnd() * 46)) + 1
            charGenned = arrayAll(genned)
            rndString = rndString + charGenned
            rndGend += 1
        End While
        fs.Write(rndString & vbNewLine)
        rndGend = 0
        charNow = charNow + 1
        genLength = genLength + 1
    End While

Из того, что я могу сказать, это должно дать мне результат, который я ищу, но сгенерированные строки нена всех последовательных по длине.Пример вывода:

alh*ph)lufe$2fz!d7c0$qfd(ol6f173#
b^i24@^v0gx%01iqrpugg8)(mqsl8%
c1km5jnz0hti&u$#rqeh5ism31t^96^
dkx&6$ok!@u#*e^x6659jpvcnn258zpi
e%y1(y3%@w9kk9&h7d6gw)w72*3c9*d)j
fy#(i4yeg0%ltj@887!x4!e32^703e4l
gj$4#5&f!!zzdkvs)v@@94)*rcmroy

Хотя строка после буквы A имеет длину 32 цифры, как и для B, и C, когда вы попадаете в G, длина строки составляет всего 29 символов.Это наиболее заметно в том, что программа генерирует только строки для символов до цифры 5, а затем останавливается:

3%y1(y3%@w9kk9&h7d6gw)w72*3c9*d)j
4y#(i4yeg0%ltj@887!x4!e32^703e4l
5j$4#5&f!!zzdkvs)

Что здесь не так?

1 Ответ

0 голосов
/ 12 февраля 2019

Я немного прибрался и перешел на класс Random, который, как мне кажется, намного проще в использовании.Если вы объявляете массив в vb.net, помните, что это переменная Dim (ubound) как тип.ubound обозначает верхнюю границу массива, самый высокий индекс, поэтому массив из 47 элементов будет иметь индексы 0-46.Значение ubound будет 46 Dim variable (46) As String

Private r As New Random
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Button1.Enabled = False
    Dim arrayLetters() As String = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
    Dim arrayAll() As String = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")"}
    Dim encLength As Integer = 16
    If CheckBox2.Checked = True Then
        encLength = 32
    End If
    Dim enhancedMode As Integer = 26
    If CheckBox1.Checked = True Then
        enhancedMode = 46
    End If
    Dim genLength As Integer = 0
    Dim charNow As Integer = 0
    Dim charGenned As String
    Dim rndGend As Integer = 0
    Dim sb As New StringBuilder
    While genLength < enhancedMode
        sb.Append(arrayAll(charNow))
        Dim rndString As String = ""
        While rndGend < encLength               
            Dim genned As Integer = r.Next(0, 46)
            charGenned = arrayAll(genned)
            rndString &= charGenned
            rndGend += 1
        End While
        sb.AppendLine(rndString)
        rndGend = 0
        charNow += 1
        genLength += 1
    End While
    Dim name As String
    If TextBox1.Text = "" Then
        name = "KeyGenned"
    Else
        name = TextBox1.Text
    End If
    Dim path As String = Application.StartupPath & "\" & name & ".txt"
    File.WriteAllText(path, sb.ToString)
    Close()
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...