我在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用于指出复杂的解决方案。