这是我到目前为止的代码。该项目的目标是让用户为a
等式输入b
,c
,ax^2+bx+c
的任意整数。出于某种原因,我没有为输入到程序中的任何数字获得正确的根。有谁可以指出我的错误行为?
import java.util.*;
public class Quad_Form {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double a = 0;
double b = 0;
double c = 0;
double discrim = 0;
double d = 0;
System.out.println("Enter value for 'a'");
String str_a = sc.nextLine();
a = Integer.parseInt(str_a);
System.out.println("Enter value for 'b'");
String str_b = sc.nextLine();
b = Integer.parseInt(str_b);
System.out.println("Enter value for 'c'");
String str_c = sc.nextLine();
c = Integer.parseInt(str_c);
double x1 = 0, x2 = 0;
discrim = (Math.pow(b, 2.0)) - (4 * a * c);
d = Math.sqrt(discrim);
if(discrim == 0){
x1 = (-b + d) / (2* a);
String root_1 = Double.toString(x1);
System.out.println("There is one root at: " + root_1);
}
else {
if (discrim > 0)
x1 = (-b + d) / (2 * a);
x2 = (-b - d) / (2 * a);
String root_1 = Double.toString(x1);
String root_2 = Double.toString(x2);
System.out.println("There are two real roots at:" + root_1 + "and" + root_2);
}
if (discrim < 0){
x1 = (-b + d) / (2 * a);
x2 = (-b - d) / (2 * a);
String root_1 = Double.toString(x1);
String root_2 = Double.toString(x2);
System.out.println("There are two imaginary roots at:" + root_1 + "and" + root_2);
}
}
}
答案 0 :(得分:2)
@Smit是关于其中一个问题的,但也有第二个问题。
当Math.sqrt(discrim)
为否定时, discrim
将无效。您应该改为Math.sqrt(Math.abs(discrim))
。
答案 1 :(得分:1)
a
,b
,c
,d
是双倍的,您将它们解析为整数。所以这可能是一个问题。
使用
Double.parseDouble();
另一个问题是你不能使负数的平方根。这将导致NaN
。对于以下用途,但您应该正确处理以获得准确的结果。
Math.sqrt(Math.abs());
此外,你应该使用以下公式来获得根
取自维基百科Quadratic equation