我已经制作了一个解决二次方程的程序,除了当平方根中的部分小于0时它工作正常。当发生这种情况时,我希望它显示没有根。这是我目前正在使用的代码。
SquareRoot = System.Math.Sqrt((B ^ 2) - (4 * A * C))
If SquareRoot < 0 Then
lblRoot1.Text = "No Root"
lblRoot2.Text = "No Root"
然而,尽管如此,如果我在这种情况下运行程序,它会崩溃。我该如何解决? (请保持答案尽可能简单,因为我还是初学者)
答案 0 :(得分:0)
你的问题是你正在检查负值的错误。负数的平方根是虚数,这是代码崩溃时得到的错误。相反,将检查移动到行列式,就像这样(这只是伪代码):
IF (B * B) - (4 * A * C) < 0
lblRoot1.Text = "No Root"
lblRoot2.Text = "No Root"
ELSE
SquareRoot = System.Math.Sqrt((B * B) - (4 * A * C))
为方便起见,您可能需要创建一个变量来保存行列式计算,如下所示:
Dim D As Integer = (B * B) - (4 * A * C) 'Use appropriate datatype instead of Integer
答案 1 :(得分:0)
为什么不简单地使用临时变量:
Dim value = (B ^ 2) - (4 * A * C)
If value < 0 Then
' error handling
Else
Dim SquareRoot = System.Math.Sqrt(value)
End If
答案 2 :(得分:0)
调试程序时,应该会看到异常发生在行
中SquareRoot = System.Math.Sqrt((B ^ 2) - (4 * A * C))
原因是你不允许对Sqrt使用负输入值(没有“负”平方根,不能用数学方法)所以你需要做这样的事情:
Input = (B ^ 2) - (4 * A * C)
If Input >= 0 Then
SquareRoot = System.Math.Sqrt(Input)
Else
lblRoot1.Text = "No Root"
lblRoot2.Text = "No Root"