我的Ceasar转换密码程序出现问题。当我必须用n个移位密码来加密某些文本时,代码工作正常。但是当我想解密一些文本时,数组索引变为负数,并且出现错误:发生了类型为“System.IndexOutOfRangeException”的未处理的异常。Visual Basic转换密码
Public Class Form1
Dim alfabet() As Char = {"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", "æ", "ø", "å"}
Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
Me.Close()
End Sub
Private Sub btnKod_Click(sender As Object, e As EventArgs) Handles btnKod.Click
Kod(txtDekodet.Text, txtTrylletal.Text, True)
End Sub
Private Sub btnDekod_Click(sender As Object, e As EventArgs) Handles btnDekod.Click
Kod(txtKodet.Text, -txtTrylletal.Text, False)
End Sub
Function Kod(tekst As String, trylletal As Integer, skalKodes As Boolean)
Dim nyeCharVaerdier(tekst.Length) As Char
For i As Integer = 0 To tekst.Length - 1
Dim nytTal As Integer = findIndex(tekst(i), trylletal)
If nytTal = -1 Then
nyeCharVaerdier(i) = tekst(i)
Else
nyeCharVaerdier(i) = alfabet(nytTal)
End If
Next
If skalKodes = True Then
txtKodet.Text = nyeCharVaerdier
Else
txtDekodet.Text = nyeCharVaerdier
End If
Return Nothing
End Function
Function findIndex(tegn As Char, trylletal As Integer) As Integer
For alfabetTaeller As Integer = 0 To alfabet.Length - 1
If tegn = alfabet(alfabetTaeller) Then
Dim nytIndex As Integer = (alfabetTaeller + trylletal) Mod alfabet.Length
Return nytIndex
End If
Next
Return -1
End Function
End Class
代码工作得很好,当我必须增加每个字母一个,并且如果它超过了我的字母()数组中的索引,则由于模数而重新开始。但是相反,它不起作用,并且数组的值低于零。所以我不认为字母数组是问题所在? – 2014-09-30 09:02:51