-1

男性、女性の2つのフィールドの範囲の値を取得して、パーセンテージを計算しようとしています。

EmployeesData.vb で

Public Function getPercentMen() As Double

Dim result As Double

result = 0

If Men + Women > 0 Then result = (Men * 100) / (Men + Women)
        End If

Return result

End Function

私の Demographics.vb には、次の出力があります。

Private Sub updateView()


    ' The percentage Men and Women recorded is displayed in
    ' the appropriate text boxes.

    percentMenTextBox.Text = fEmployeesData.getPercentMen().ToString()
    percentWomenTextBox.Text = fEmployeesData.getPercentWomen().ToString()

    updateView()
End Sub

私が得るエラーは

An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll

Visual Studio は次の行を示します

percentMenTextBox.Text = fEmployeesData.getPercentMen().ToString()

問題は、Double を String に誤って強制しようとしている、またはそのようなことだと思います

クラス全体を追加しました

Public Class EmployeesData
    Private fMen As Integer
    Private fWomen As Integer

    Public Sub New()
        fMen = 0
        fWomen = 0
    End Sub

    Public ReadOnly Property Men As Integer
        Get
            Return fMen
        End Get
    End Property

    Public ReadOnly Property Women As Integer
        Get
            Return fWomen
        End Get
    End Property

    Public Sub addMen()
        fMen = fMen + 1
    End Sub

    Public Sub addWomen()
        fWomen = fWomen + 1
    End Sub

    Public Function getPercentMen() As Double
        Dim result As Double
        result = 0
        If Men + Women > 0 Then
            result = (Men * 100) / (Men + Women)
        End If
        Return result
    End Function

    Public Function getPercentWomen() As Double
        Dim result As Double
        result = 0
        If Men + Women > 0 Then
            result = (Women * 100) / (Men + Women)
        End If
        Return result
    End Function

    Public Sub reset()
        fMen = 0
        fWomen = 0
    End Sub
End Class
4

2 に答える 2

3

このエラーの理由は次の部分です。

Private Sub updateView()


'... snipped

    updateView()
End Sub

ここにあるのは、基本的に、サブルーチンを再帰的に呼び出す (スタックに追加される) 終わりのないループであり、最終的にはスタック オーバーフローを引き起こします。

VS があなたを指す理由fEmployeesData.getPercentMen()は、その時点でいっぱいになっているスタックへの追加の追加を実行するため、その呼び出しは基本的に、いわばグラスをこぼすドロップだからです。つまり、エラー メッセージは、次の呼び出しまたは次のラウンド トリップ自体の呼び出しである可能性があるため、誤解を招く可能性があります。

updateView()解決策は、呼び出しをそれ自体から削除することです。外部コードからのみ呼び出します。常に呼び出す必要がある場合は、代わりにタイマーの使用を検討するか、必要な場合にのみイベントから使用してください。

他のコードは問題なく、このエラーとは関係ありません。

お役に立てれば。

于 2012-11-12T20:19:02.583 に答える
0

ここには 2 つの問題があります。まず、あなたが使用している男性と女性の変数は両方とも整数であると推測しているので、整数除算が見られます。Integer を Integer で割った結果は、やはり ... Integer です。

代わりにこれを試してください:

Public Function getPercentMen() As Double

    Dim result As Double = 0.0  
    If Men + Women > 0 Then result = (Men * 100.0) / (Men + Women)   
    Return result

End Function

次に、StackOverflow 例外を取得するには、自己参照プロパティがある可能性があります。男性と女性の変数がどのように実装されているかを確認してください。彼らが自分自身を使用する場合、またはこの getPercentMen() メソッドを使用する場合、基本ケースのない再帰呼び出しを作成でき、StackOverflow が発生します。

于 2012-11-12T19:12:16.877 に答える