>我正在尝试为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。