我得到NaN来回答我的二次方程计算器-JAVA

时间:2013-05-04 18:45:25

标签: math nan equation quadratic

这是我的主要课程:

import java.util.Scanner;

public class calc {
public static void main(String[] args){
    Scanner variablea = new Scanner(System.in);
    Scanner variableb = new Scanner(System.in);
    Scanner variablec = new Scanner(System.in);
    int a1, b1, c1;
    System.out.println("enter your 'A' variable");
    a1 = variablea.nextInt();
    System.out.println("enter your 'B' variable");
    b1 = variableb.nextInt();
    System.out.println("enter your 'C' variable");
    c1 = variablec.nextInt();

    algorithm algorithmObject = new algorithm();
    algorithmObject.algorithm(a1, b1, c1);

}

}

这是第二个

      public class algorithm{
public void algorithm(int a, int b, int c){
    double x1;
    double square = Math.sqrt(b*b - 4*a*c);
    double numerator = b*-1 + square;
    double finalanswer = numerator/2*a;

    System.out.println(finalanswer);
}

}

Eclipse没有给我任何错误,但在它询问我的3个变量并输入后,它只给出了NaN。知道我做错了吗?

3 个答案:

答案 0 :(得分:1)

代码存在问题,但罪魁祸首很可能是这一行:

double square = Math.sqrt(b*b - 4*a*c);

如果b*b - 4*a*c是负数(没有方程的解),则square是NaN,并且涉及它的每个计算也将是NaN。您可以查看here


首先检查b*b - 4*a*c < 0是否可以改进你的计算器,如果是,那么你可以写信给控制台没有真正的解决方案(当然也可以停止计算)。


我会将public void algorithm(int a, int b, int c)更改为

public void algorithm(double a, double b, double c)

当您最不期望它时,整数算术会让您感到惊讶,我认为没有理由将abc限制为int - s。< / p>


好的,希望这会有所帮助。

答案 1 :(得分:1)

您需要注意几个特殊情况。你似乎没有注意到它们中的任何一个:

y = a*x^2 + b*x + c
  1. 如果二次系数a为零,则只有一个根,因为方程是线性的:y = b*x + c
  2. 如果线性系数b为零,则有两个根:[x1, x2] = +/-sqrt(c)
  3. 如果常系数c为零,则其中一个根为零,另一个为-b/a
  4. 如果判别式为负,则有两个复共轭根。

    有趣的是,所有这些情况对于物理问题的解决方案都有意义,如阻尼谐波运动和L-C-R电路。你也应该了解一些这些。

答案 2 :(得分:0)

由于这看起来有点像家庭作业,我只会提示:

NaN是数学函数返回的结果,由于某种原因,无论是技术还是数学,结果都无法准确地表示为数字。