这个二次方程式不会在我确定要返回的字符串中返回负数。 这是等式:
public class QuadraticEquation {
String final0;
public String calculate(int a, int b, int c) {
double done1 = ((-1 * b) + Math.sqrt((b * b) - (4 * a * c))) / (2 * a);
double done2 = ((-1 * b) - Math.sqrt((b * b) - (4 * a * c))) / (2 * a);
final0 = "x = " + (done1) + " or x = " + (done2);
return final0;
}
}
想象一个方程,其中a,b和c值如-3,13和-4。返回值为-0.3(重复)和-4。但是这个等式只返回正数,所以在这种情况下它将返回0.3(重复)和4.为什么这样,我该怎么做才能解决它?
注意:我确实认为这是Java错误而不是数学错误。如果是数学错误,请在评论中告诉我,我会及时将其放入适当的论坛。谢谢。
答案 0 :(得分:2)
我原以为
-3*x^2 + 13 *x + -4 = -3 * (x - 0.33333) * (x - 4) = 0
所以两个正面答案是正确的。
尝试改为
1 * x^2 + 0 * x -1 = (x - 1) * (x + 1) = 0
即。 x = -1或+1
以下是我的写作方式。
public static String calculate(int a, int b, int c) {
double sqrt = Math.sqrt((b * b) - (4 * a * c));
double done1 = (-b + sqrt) / (2 * a);
double done2 = (-b - sqrt) / (2 * a);
return "x = " + (done1) + " or x = " + (done2);
}
答案 1 :(得分:2)
public static void main(String[] args) {
String final0 = calculate(-3, 13, -4);
System.out.println(final0);
}
public static String calculate(int a, int b, int c) {
String final0 ;
int i = -1 * b; // -1 * 13 = -13
System.out.println(i);
int j = 4 * a * c; // 4 * -3 * -4 = 4 * 12 = 48
System.out.println(j);
double sqrt = Math.sqrt((b * b) - j); // sqrt ((13 * 13) - 48) = sqrt(169 - 48) = sqrt(121) = 11
System.out.println(sqrt);
double d = i + sqrt; // -13 + 11 = -2
System.out.println(d);
int k = 2 * a; // 2* -3 = -6
System.out.println(k);
double done1 = d / k; // -2 / -6 = 1/3 = 0.3333333333
System.out.println(done1);
double done2 = (i - sqrt) / k;
final0 = "x = " + (done1) + " or x = " + (done2);
return final0;
}
如果将方法分解为更多局部变量,您将看到java中的数学运算正常。
答案 2 :(得分:1)
代码与您的输入正常工作。例如,如果您将b更改为-13,则会得到
x = -4.0或x = -0.3333333333333333
Math.sqrt将始终返回一个忽略复数的正数。但除此之外,这还有点。