2016-04-26 244 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。