2016-04-26 111 views
0

这是我的代码,当我运行它时,出现索引超出了行b = Asc(y(j + m))中数组的边界。我试过Try and Catch,但没有成功。索引超出数组范围VB

Public Function SMITH(x, y, SX, SY) 

    Dim a, b, j As Integer 
    result = 0 
    m = x.Length 
    n = y.Length 

    preBmBc(x) 
    preQsBc(x) 

    j = 0 
    While (j <= (n - m)) 
     If (SX = SY.ToString.Substring(j, m)) Then 
      result = 1 
     End If 
     a = Asc(y(j + (m - 1))) 
     b = Asc(y(j + m)) 
     j = j + Math.Max(bmBc(a), qsBc(b)) 
    End While 

    Return result 

End Function 
+0

如何不让索引超出数组边界?使用调试器,并逐步完成代码。这显示你什么?我们不能为你做这件事,因为我们不知道你将'x,y,SX,SY'传递给你的SMITH函数。 –

+0

y,j和m的值是多少?我怀疑有些东西没有正确设置。调试应该有所帮助? – Hexie

+0

您将在y(j + m)处始终有一个例外。最后一次迭代中的j + m等于n。因此y(n)会超出数组长度。我认为你需要一个asc(y(j +(m-2))和b = asc(y(j + m)。你可能需要从j = 1开始 –

回答

0

您是否尝试过让m =“m-1”为b?您确实需要使用断点和调试程序遍历代码,以确定程序何时抛出OutOfRangeException。