日期:2014-05-17  浏览次数:20791 次

求助:一个asp下标越界的问题
求助:我用asp写了个组合的算法,调试一直出现“ If b(i)=1 And b(i+1)=0 Then ”这段代码出现下标越界,可我想不管怎么算也运算不到最后一个数组,可能是我已经思维定势了,求助大神给我解惑

VBScript code

Function CreateResult(a,b,m)
 
  Dim result
  result=""
  n=UBound(a)-1
  tempTest =""
  j=0
  For i=0 To n
  tempTest = tempTest & "," & b(i) 
  j=j+1
   If b(i)=1 Then 
    result = result & "+" & a(i)
   End If  
  Next 
 CreateResult = result

End Function 

Function Combination(a,m) '从数组a中选取m个数进行组合
  Dim n,list
  Dim b()
   n = UBound(a)-1
  ReDim b(n) '辅助数组。首先初始化,将数组前m个元素置为1,表示第一个组合为m个数
 
  For i=0 To n
   
   If i<m Then 
     b(i)=1
   Else 
     b(i)=0
   End If 
  Next 

 list = list & "|" & CreateResult(a,b,m)
 tempEnd = "N"
  
 Do While tempEnd ="N"
    findFirst = "N"
   swap = "N" 
   
   For i=0 To n 
     L=0
     'Call JS_AlertBackEnd(i)
     If  findFirst="N" And b(i)=1  Then 
       k=i
       findFirst = "Y" 

     End If 
   
     If  b(i)=1  And b(i+1)=0 Then 
        b(i)=0
        b(i+1)=1
        swap = "Y" 
       If k<>1 Then 
        For L=0 To i-k
         b(L)=b(k+1)
        Next 
        For L=i-k To i
         b(L)=0
        Next 
       End If 
       If k=i And i=n-m Then 
           tempEnd = "Y"
       End If
     End If 
    If swap="Y" Then 
     Exit For  
    End If 
   Next 
    list = list & "|" & CreateResult(a,b,m)

 Loop 
 Combination = list 
End Function 


------解决方案--------------------
这个当然越界了,你循环到最后一个的时候,再+1不越界也怪

VBScript code
 If (i+1)<=n And b(i)=1  And b(i+1)=0  Then '多加一个是否越界的判断

------解决方案--------------------
ReDim b(n) <-- b的下标是0 到n
For i=0 To n <-- 这里 i 是循环到n的, i=n时 i+1必然超过界限
...
If b(i)=1 And b(i+1)=0 Then <----这里 i=n时 就发生了i+1越界

------解决方案--------------------
下标是从0开始的,你加一就多了啊
------解决方案--------------------
你加一下判断就行了,3楼的说的很对
------解决方案--------------------
For i=0 To n
说明i是从0开始的

If b(i)=1 And b(i+1)=0 Then 

这里的b(i+1)=0
这里怎么能=0呢,最小也结果也是1啊