如果声明没有反应

时间:2018-02-02 10:56:30

标签: arrays vb.net visual-studio

我正在做一个学校项目。我将模拟德国的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

2 个答案:

答案 0 :(得分:1)

你在评论中提到它在索引等于10时崩溃。原因可能是你的数组中最后一个元素的索引是9但是数组的长度是10(从0开始计数)。这可能是它压碎的原因,即程序试图访问[10]但它已经超出界限。

答案 1 :(得分:0)

我非常愚蠢,而且我发现了它崩溃的原因。

阵列没有26个位置,程序试图找到一个没有位置的字母。

换句话说,如果程序要输出T,则程序值为19. if语句表示如果高于9,则应减去9.现在为19,结果为10