昏暗的双打和字符串计算百分比插入文本框

时间:2012-11-12 19:02:33

标签: vb.net

我试图获得一系列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

2 个答案:

答案 0 :(得分:3)

出现此错误的原因是:

Private Sub updateView()


'... snipped

    updateView()
End Sub

你在这里所拥有的基本上是一个永不停止的循环,递归地调用一个子程序(它会添加到堆栈中),最终会导致堆栈溢出。

VS指向fEmployeesData.getPercentMen()的原因是该调用基本上是使玻璃溢出的下降,因为它会对堆栈执行额外的添加,此时该堆栈已满。换句话说,错误信息具有误导性,因为它可能很容易成为下一个呼叫,或者下一次往返呼叫本身。

解决方案是从内部删除updateView()调用。只能从外部代码调用它。如果您需要不断调用它,请考虑使用计时器,或仅在需要时从事件中使用它。

您的其他代码没问题,与此错误无关。

希望这有帮助。

答案 1 :(得分:0)

我在这里看到两个问题。首先,我猜你正在使用的Men and Women变量都是整数,所以你看到整数除法。整数除以整数的结果仍然是......整数。

请改为尝试:

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。