我使用二次公式在java中创建一个简单的二次方程求解器。这就是发生的事情:

时间:2014-01-17 22:50:36

标签: 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

4 个答案:

答案 0 :(得分:5)

b^2没有按照您的想法在Java中执行。写下b*b代替。 ^运算符实际上是the bitwise-XOR operator;没有指数运算符。 (但是,有一个Math.pow() function。)

答案 1 :(得分:2)

除了^是XOR而不是幂,你的求解器还有另一个问题:有时,B 2 小于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 );
}

答案 2 :(得分:0)

您可以写b * bMath.pow(b,2)代替b ^ 2bitwise xor(不包括)b2

答案 3 :(得分:0)

看起来你正试图在这里制作三角函数。不记得这个名字,但我可以说b的意思是平方?如果是这样,请使用Math.pow(numberToSquare,theSquareNumber)  一行将如下所示: 双x1 =(-b + Math.sqrt(Math.pow(b,2) - 4 * a * c))/(2 * a)