负数会发生奇怪的异常

时间:2014-03-23 12:30:43

标签: vb.net indexoutofboundsexception

这是我的代码:

        Dim index As Integer
 do
  index = find difference(board1,board2)
    if index = - 1 then 
      exit do
   end if
 loop

find difference是一个返回整数的函数,如果没有找到差异,我将其设置为返回-1,那么循环退出,但是这给了我一个异常的异常。我在第index = find difference(board1,board2)行附近放了一个try语句,并将消息作为例外捕获-1:

指数超出范围。

必须是非负数且小于集合的大小。

参数名称:index。

我不知道是什么导致这种情况,任何帮助都会非常感激。

修改

find_difference:

 dim indy as integer
 dim indexes as list(of integer)
 dim info as integer = 0
 indexes.add(-1)
 for each cell in cells
 if cell.info > info then
   indexes.clear
   indexes.add(cell.index)
 else if cell.info = info then
   indexes.add(cell.index)
 end if
 next 

 indy  = Math.Floor((indexes.Count + 1) * Rnd())
 return indexes(indy)
end function

1 个答案:

答案 0 :(得分:1)

find_difference函数中只有一个使用索引的语句:

return indexes(indy)

表示indy的值计算为-1或高于集合的大小:

indy  = Math.Floor((indexes.Count + 1) * Rnd())

如果indices.Count为1且Rnd()大于0.5,那么indy将被计算为1,这将超出集合的范围。应删除+ 1