如果第一个位置为空,则无法从数组中读取值



我有这个简单的代码,想法是从包含数字的数组中找到最小值,它在大多数情况下都有效:

For yy As Integer = 0 To 23
 If (IsNumeric(data(2, yy))) Then
  If (yy > 0) Then
   If (data(2, yy) < min(days)) Then
    min(days) = data(2, yy)
   End If
  Else
   min(days) = data(2, yy)
  End If
 End If
Next

现在,数据数组可能包含也可能不包含值,当数组中的第一个位置具有值时,即使数组中的其他位置为空,代码也不会出现问题。问题是当数组的第一个位置为空时,即使数组的其余部分充满了值,它也不会读取其中任何一个,有什么想法吗?

在您的方案中,在第一个循环中,您将min(days)设置为零。
然后在随后的循环(yy=1 等)中,您使用与在第一个循环中设置为零的相同min(days)检查data(2, yy)中包含的值。

因此,除非 data(2,yy) 小于零,否则您永远不会得到if(data(2,yy) < min(days)的真实条件

似乎您有问题,因为您始终使用相同的值min(days)

如果第一个元素为空,那么您永远不会进入将min(days)设置为初始值的Else部分。因此min(days)是默认值0。而且我假设0总是小于days(2, yy)中的每个数字.

林克来做这项工作怎么样?

    min(days) = (From index1 In {2}
                 From index2 In Enumerable.Range(0, 24)
                 Where IsNumeric(data(index1, index2))
                 Select (data(index1, index2))).Min()

您可以事先检查以找到数组中的开始位置(注意:未针对您的代码进行测试):

Dim startAt As Integer = 0
For i = 0 To 23
    If IsNumeric(data(2, i)) Then
        startAt = i
        min(days) = data(2, i)
        Exit For
    End If
Next
For i As Integer = startAt + 1 To 23
    If (IsNumeric(data(2, i))) Then
        If (data(2, i) < min(days)) Then
            min(days) = data(2, i)
        End If
    End If
Next

但是,我怀疑您需要为您的项目设置选项严格打开并解决许多数据类型问题。

相关内容

  • 没有找到相关文章

最新更新