我有这个简单的代码,想法是从包含数字的数组中找到最小值,它在大多数情况下都有效:
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
但是,我怀疑您需要为您的项目设置选项严格打开并解决许多数据类型问题。