0

Objという名前のプロパティを持つオブジェクト ( と呼びます) を含むコードを受け取りましNumberた。これらのオブジェクトの配列は、インデックス 0..39 の 40 個のオブジェクトで定義されます。index にオブジェクトは必要ありません0

Numberコードには、すべての の合計をObj配列に保存する静的変数があります。この変数は一度だけ初期化されます。Number値自体が定義された直後。

通常は機能しますが、異なるオブジェクトの値で例外 (再現できませんでした) をログに記録することがあり、値NumberAllが間違っていることがわかります (最近 1722 と 2134 をログに記録しました。問題ではありません)。 -しかし、それらの唯一の一般的な素因数は2です。1554のはずです。疑問に思っている場合は、以下で確認できます:))。

編集:例外は、Index was outside the bounds of the array以下のコードに持ち込まれたオンザループです-この問題の直接的な影響です。

以下に示す2つの合計方法を試しました。

関連するコードは次のとおりです。値が割り当てられるコード内の他の場所はありませんNumberAll

Static NotFirstTime As Boolean, NumberAll As Integer

If NotFirstTime = False Then GoTo Data

sPoint:    'Code and more code
' ...
' ...
breakValue = someValue Mod NumberAll
Sum = 0
I = 1
    Try
        Do
            If Sum + myArray(I).Number >= breakValue Then
                Exit Do
            End If
            Sum = Sum + myArray(I).Number
            I = I + 1
        Loop
    Catch ex As Exception
        'log error and variable data - breakValue is larger than Sum will ever get
        'hence the loop reaches the point of trying myArray(40) which doesn't exist
    End Try

' ...

Data:
    NotFirstTime = True

    myArray(1).Number = 37
    myArray(2).Number = 34
    myArray(3).Number = 44
    myArray(4).Number = 31
    myArray(5).Number = 59
    myArray(6).Number = 26
    myArray(7).Number = 33
    myArray(8).Number = 28
    myArray(9).Number = 20
    myArray(10).Number = 13
    myArray(11).Number = 92
    myArray(12).Number = 65
    myArray(13).Number = 71
    myArray(14).Number = 22
    myArray(15).Number = 22
    myArray(16).Number = 42
    myArray(17).Number = 26
    myArray(18).Number = 26
    myArray(19).Number = 33
    myArray(20).Number = 34
    myArray(21).Number = 22
    myArray(22).Number = 19
    myArray(23).Number = 85
    myArray(24).Number = 72
    myArray(25).Number = 47
    myArray(26).Number = 40
    myArray(27).Number = 47
    myArray(28).Number = 54
    myArray(29).Number = 48
    myArray(30).Number = 44
    myArray(31).Number = 37
    myArray(32).Number = 34
    myArray(33).Number = 44
    myArray(34).Number = 9
    myArray(35).Number = 57
    myArray(36).Number = 37
    myArray(37).Number = 19
    myArray(38).Number = 13
    myArray(39).Number = 68
    NumberAll = 0

    'Only one of the following methods is used. They seem to give the same result. The bug exists in both.

    'Method one
    For I = 1 To 39 'E מספר המסכתות
        NumberAll = NumberAll + myArray(I).Number
    Next I

    'Method two
    Dim myList As List(Of Obj) = New List(Of Obj)(myArray)
    NumberAll = myList.Sum(Function(b) b.Number)
    NumberAll -= myArray(0).Number
GoTo sPoint
4

0 に答える 0