2016-01-22 94 views
0

我正在编写一个Ceasaer函数,它接收一个字符串并通过Ceasear密码的变体运行它,并返回编码的文本。出于某种原因,我在没有指定边界的数组上发生索引超出范围错误。为什么我得到这个异常,我该如何解决它?为什么我得到一个索引超出范围例外?

VB.NET代码:

Public Shared Function Ceaser(ByVal str As String) As String 
    Dim r As String = "" 
    Dim ints() As Integer = {} 
    Dim codeints As Integer() = {} 
    Dim codedints As Integer() = {} 
    Dim ciphertext As String = "" 
    For i As Integer = 0 To str.Length - 1 
     Dim currentch As Integer = Map(str(i)) 
     ints(i) = currentch 'Where exception is happening 
    Next 
    Dim primes As Integer() = PrimeNums(ints.Length) 
    For i As Integer = 0 To primes.Length - 1 
     codeints(i) = ints(i) + primes(i) - 3 
    Next 
    For i As Integer = 0 To codeints.Length - 1 
     Dim currentnum As Integer = codeints(i) Mod 27 
     codedints(i) = currentnum 
    Next 
    For i As Integer = 0 To codedints.Length - 1 
     Dim letter As String = rMap(codeints(i)) 
     ciphertext += letter 
    Next 
    Return ciphertext 
End Function 
+1

所有这些数组都已声明但未实例化 - 它们没有大小,没有要存储的元素/插槽。请参阅[在Visual Basic中的数组](https://msdn.microsoft.com/library/wak0wfyt(v = vs.110).aspx) – Plutonix

+3

'Dim Intets As Integer(str.length-1)'将实例化数组n个元素,其中n =字符串str的长度。您必须相应地采用其他阵列。 –

+0

@Alex B.非常感谢:)这确实是世界上最好的问答网站! –

回答

1

您必须指定数组边界,然后才能存取权限的元素:

Dim ints As Integer(str.length-1) 

将实例与n个元素,其中n =字符串长度数组海峡。 (小心:VB.NET数组长度是从零开始的,所以具有1个元素的数组被实例化为array(0))。您必须相应地采用其他数组。

相关问题