0

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

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

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

4

3 回答 3

2

在您的场景中,在第一个循环中您设置min(days)为零。
然后在随后的循环中(yy=1 等...),您检查其中包含的值,该值data(2, yy)min(days)您在第一个循环中设置为零的值相同。

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

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

于 2013-01-23T21:42:58.017 回答
1

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

Linq 怎么做这项工作?

    min(days) = (From index1 In {2}
                 From index2 In Enumerable.Range(0, 24)
                 Where IsNumeric(data(index1, index2))
                 Select (data(index1, index2))).Min()
于 2013-01-23T22:35:04.697 回答
0

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

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

但是,我怀疑您需要为您的项目设置Option Strict On并解决很多数据类型问题。

于 2013-01-23T22:09:56.400 回答