调暗双精度和字符串以计算要插入文本框的百分比



>我正在尝试为2个字段的范围获取一个值,男人,女人计算出一个百分比。

在员工数据中.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

在我的人口统计中.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()

我相信问题是我试图错误地将双精度强制为字符串或类似的东西

我添加了整个类

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

此错误的原因是这部分:

Private Sub updateView()

'... snipped
    updateView()
End Sub

你在这里基本上是一个永无止境的循环,递归地调用一个子例程(它添加到堆栈中),最终将导致堆栈溢出。

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

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

您的其他代码很好,与此错误无关。

希望这有帮助。

我在这里看到了两个问题。首先,我猜你使用的男人和女人变量都是整数,所以你看到的是整数除法。整数除以整数的结果仍然是...整数。

试试这个:

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。

最新更新