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 に答える