你好,我是Java的新手,我不明白为什么我的Programm两次输出NaN!
这是代码。谁能告诉我这是怎么回事?
我给的投入 分别是2、3、3 (A是2 B是3 C是3)
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.print("A :");
double a = scan.nextDouble();
System.out.print("\nB :");
double b = scan.nextDouble();
System.out.print("\nC :");
double c = scan.nextDouble();
double temp = Math.sqrt(b*b-4*a*c);
double result_one = (-1*b+ temp)/(2*a);
double result_two=(-1*b- temp)/2*a;
System.out.println("The Result for A:" +a +" B:" +b +" C:" +c +" is");
System.out.println("Result 1 : " + result_one);//This double Should not be NaN
System.out.println("Result 2 : " + result_two);//This double Should not be NaN
}
答案 0 :(得分:3)
这是经典的二次方程。您的问题是由temp
变量引起的。 b*b
的值小于4*a*c
,因此,这意味着您尝试提取负数的平方根。
尝试打印temp变量,然后根据您的输入,您将得到相同的NaN
消息。基本上,该消息是由以下事实引起的:使用“实数”不能解决您的问题。
您应该阅读complex个数字。
如@michalk在评论中所建议,您可以阅读有关Math.sqrt函数的信息。
由于您在回答问题时未添加值,因此我正在编辑此答案以明确说明其不起作用的原因:
a * x^2 + b * x + c = 0
或2 * x^2 + 3 * x + 3 = 0
b^2 - 4*a*c >= 0
或3*3 - 4*2*3 > 0
=>
由于-15 < 0
来自here:
返回: a的正平方根如果参数为NaN或更小 大于零,结果为NaN。
答案 1 :(得分:1)
您实际上是从此行收到错误NaN
(不是数字)-
double temp = Math.sqrt(b*b-4*a*c);
原因(3*3-4*2*3
)给出-15
。负数的平方根为您提供NaN
。因此,您得到NaN
的两倍。
您可以尝试使用以下代码段以获得正确的结果-
double temp = b * b - 4.0 * a * c;
System.out.println("The Result for A:" +a +" B:" +b +" C:" +c +" is");
if (temp > 0.0) {
double result_one = (-b + Math.pow(result, 0.5)) / (2.0 * a);
double result_two = (-b - Math.pow(result, 0.5)) / (2.0 * a);
System.out.println("Result 1 : " + result_one);
System.out.println("Result 2 : " + result_two);
} else if (temp == 0.0) {
double result_one = -b / (2.0 * a);
System.out.println("The root is " + result_one);
} else {
System.out.println("The equation has no real roots.");
}