java中的二次方程求解器

时间:2014-05-18 11:12:23

标签: java quadratic

我尝试并成功构建了二次方程求解器。

public class Solver {
public static void main (String[] args) {
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
int c = Integer.parseInt(args[2]);
double positive = (-b + Math.sqrt(b*b-4*a*c))/2*a;
double negative = (-b - Math.sqrt(b*b-4*a*c))/2*a;
System.out.println("First answer is " + positive);
System.out.println("Second answer is " + negative);
} 
}

有时我在输出中得到NaN。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

NaN - 不是数字 - 是一个值,表示无效数学运算的结果。使用实数,您无法计算负数的平方根 - 因此返回NaN

您的解决方案的另一个问题是/2*a片段。除法和乘法具有相同的优先级,因此括号是必要的。此外,如果a等于零,Java将抛出java.lang.ArithmeticException: / by zero - 您还需要检查它。

一种可能的解决方案是:

if (a == 0) {
    System.out.println("Not a quadratic equation.");
    return;
}

double discriminant = b*b - 4*a*c;
if (discriminant < 0) {
    System.out.println("Equation has no ansewer.");
} else {
    double positive = (-b + Math.sqrt(discriminant)) / (2*a);
    double negative = (-b - Math.sqrt(discriminant)) / (2*a);
    System.out.println("First answer is " + positive);
    System.out.println("Second answer is " + negative);
}

答案 1 :(得分:0)

NaN代表非数字。您输入的输入导致数学上未定义的操作。所以,如果第一个数字&#34; a&#34;你得到的是零,如果b * b大于4 * a * c,你也会得到那条信息,第一种情况是除零,第二种情况是计算负数的根。