我在java中使用二次公式制作了一个简单的二次方程求解器。事情是这样的:

我在java中使用二次公式制作了一个简单的二次方程求解器。事情是这样的:,java,Java,我的代码: int a = 1; int b = 6; int c = 5; double x1 = (-b + Math.sqrt(b^2 - 4*a*c))/(2*a); double x2 = (-b - Math.sqrt(b^2 - 4*a*c))/(2*a); System.out.println("x=" + x1 + x2 ); 输出: x=NaNNan b^2并不像您认为它在Java中所做的那样。改为写b*b。^运算符实际上是;没有指数运算符。但是,还有一个问

我的代码:

 int a = 1;
 int b = 6;
 int c = 5;
 double x1 = (-b + Math.sqrt(b^2 - 4*a*c))/(2*a);
 double x2 = (-b - Math.sqrt(b^2 - 4*a*c))/(2*a);
 System.out.println("x=" + x1 + x2 );
输出:

 x=NaNNan
b^2并不像您认为它在Java中所做的那样。改为写b*b。^运算符实际上是;没有指数运算符。但是,还有一个问题。

你可以写b*b或Math.powb,2而不是b^2,后者是b与2的异或。

除了作为异或而不是幂外,你的解算器还有另一个问题:有时,B2小于4AC,在这种情况下,方程只有复杂的解。您的代码应该在调用Math.sqrt之前检查该条件,以避免返回NaN

最后,您的输出是不正确的:您的println将生成根的串联,而不是单独打印

以下是修复后的代码:

int a = 1;
int b = 6;
int c = 5;
int d = b*b - 4*a*c;
if (d < 0) {
     System.out.println("No real solutions.");
} else {
    double sqD = Math.sqrt(d);
    double x1 = (-b + sqD)/(2*a);
    double x2 = (-b - sqD)/(2*a);
    System.out.println("x=" + x1 + " " + x2 );
}

看起来你想在这里做一个三角函数。我不记得名字了,但我能告诉你b是平方的吗?如果是,请使用Math.pownumberToSquare,即平方数 这一行将如下所示:
Double-x1=-b+Math.sqrtMath.powb,2-4*a*c/2*a

您必须添加以下if语句:ifx1+x2==nannannan{x=Batman}.s/\bration/real/g,s/unrelical/complex/gin,在这种情况下,方程只有无理解。您指的是复杂解。输出是正确的,因为它与System.out.printlnx=+x1+x2相同@ZouZou虽然中间没有空格,但是对于总数超过三位数的输出,在计算输出时可能会有一些猜测。@dasblinkenlight是的,我完全同意当前输出不是很方便,只是想指出println将产生根的和是不正确的:。和+1用于指出复杂的解决方案。