我正在做一个学校项目。我将模拟德国的Enigma机器。
我希望数组为" round",就像索引超出数组长度一样,它将从数组重新开始继续。
我不知道以下内容是如何起作用的。如果wh0pos
变得超过数组长度(10),则应减去10。
If (wh0pos > wheel1.Length) Then ' Hvis
wh0pos = wh0pos - wheel1.Length
End If
If (0 > wh0pos) Then
wh0pos = wh0pos + wheel1.Length
End If
wh1 = wh0 + wheel1(wh0pos) ' Bogstav-værdi + værdiens position i rotor 1
我们的老师不知道什么可能是错的,所以我希望这里有人可以帮助我。完整代码如下。
Public Class Form1
Dim wheel1(0 To 25), wheel2(0 To 25), wheel3(0 To 25) ' Her definerer jeg de tre rotorer
Dim whPos1, whPos2, whPos3 As Integer ' Her definerer jeg de tre rotorers position
Dim wh0 = 0
Dim wh1 = 0
Dim wh2 = 0
Dim charGoBack As Integer
Dim wh0pos As Integer
Dim wh1pos As Integer
Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
wheel1 = {3, 2, 1, -2, -3, 3, 2, 1, -2, -3} ' Første array (indeholder forskydningen i tal)
wheel2 = {+1, -1, +2, +1, -3, 3, 2, 1, -2, -3} ' Andet array
whPos1 = 5 ' Sætter rotor1 position til 0
whPos2 = 0 ' Sætter rotor2 position til 0
End Sub
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
whPos1 = whPos1 + 1 ' Hver klik, flyttes rotor-position 1 gang
If (whPos1 = 25) Then ' Hvis rotor1 er nået sidste bogstav
whPos1 = 0 ' Sæt rotor1 til 0
whPos2 = whPos2 + 1 ' Flyt rotor2 én gang
End If
wh0pos = wh0 + whPos1 ' Tager process1 og adderer rotorflytningen
wh0 = (Asc(TextBox1.Text) - 65) ' Konverterer bogstav til ASCII-værdi
If (wh0pos > wheel1.Length) Then ' Hvis
wh0pos = wh0pos - wheel1.Length
End If
If (0 > wh0pos) Then
wh0pos = wh0pos + wheel1.Length
End If
wh1 = wh0 + wheel1(wh0pos) ' Bogstav-værdi + værdiens position i rotor 1
wh1pos = wh1 + whPos2
If (wh1pos > (wheel2.Length - 1)) Then ' Hvis
wh1pos = wh1pos - wheel2.Length
End If
If (wh1pos < 0) Then
wh1pos = wh1pos + wheel2.Length
End If
wh2 = wh1 + wheel2(wh1pos) ' Udkom af rotor1 + værdiens position i rotor 2
Label1.Text = wh0
Label2.Text = wh1
Label3.Text = wh2
charGoBack = (wh2) + 65 ' Tager den krypterede ASCII-værdi og gør klar til at omkonvertere til bogstav igen
If (charGoBack > (65 + 26)) Then ' Hvis charGoBack er større end ASCII-intervallet for bogstaver
charGoBack = charGoBack - 65 ' Subtraher resultat med 65
End If
If (charGoBack < 0) Then ' Hvis 0 er større end charGoBack
charGoBack = charGoBack + 65 ' Adder det med 65, så vi kommer op i ASCII-bogstavrækken
End If
Label4.Text = Chr(charGoBack) ' Printer krypterede tekst
End Sub
End Class
答案 0 :(得分:1)
你在评论中提到它在索引等于10时崩溃。原因可能是你的数组中最后一个元素的索引是9但是数组的长度是10(从0开始计数)。这可能是它压碎的原因,即程序试图访问[10]但它已经超出界限。
答案 1 :(得分:0)
我非常愚蠢,而且我发现了它崩溃的原因。
阵列没有26个位置,程序试图找到一个没有位置的字母。
换句话说,如果程序要输出T,则程序值为19. if语句表示如果高于9,则应减去9.现在为19,结果为10