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