2013-05-04 28 views
0

这是我的主类:我收到的NaN的答案,我二次方程calculator- JAVA

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。任何想法我做错了什么?

+1

NaN不是数字 - 如果有帮助 – 2013-05-04 18:47:28

+0

您可以将'b * -1'更改为'-b',看起来更清洁 – nullptr 2013-05-04 18:49:51

+0

注意:我不是Java专家,但它确实需要使用三台扫描仪? – 2013-05-04 18:55:16

回答

1

没有与代码问题,但罪魁祸首是最有可能这一行:

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

如果b*b - 4*a*c是负的(没有方程的解),那么平方是NaN,涉及这将是每一个计算NaN也是如此。你可以检查它here


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


我会改变,当你最不经意的时候,我看不出有任何理由abc应该被约束int -s public void algorithm(int a, int b, int c)

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

的整数运算可以令你大吃一惊。


好的,希望对此有所帮助。

+0

,所以我该如何解决它?大声笑对不起,我buffoonishness – user2350474 2013-05-04 19:40:50

+0

@ user2350474请检查我更新的答案。 – Ali 2013-05-04 19:44:53

+0

我想我明白了。我为sqrt里面叫做根的东西做了一个单独的变量。我做了这个绝对值,然后平方。 double x1; \t \t double root = Math.abs(b * b-4 * a * c); \t \t double square = Math.sqrt(root); – user2350474 2013-05-04 19:50:26

0

由于这看起来有点家庭作业,我只给出一个提示:

NaN是什么数学函数返回时,结果不能准确地表示了一些因为某些原因,无论是技术或数学。

+0

这就是我作为一个评论 - 我不太确定,如果我应该把这个数字看作是一个答案 – 2013-05-04 18:49:39

+0

@ScottSelby True - 直到我已经发布这个消息,我才看到您的评论。尽管如此,答案应该足以帮助海报出来,同时仍然让他学习一些东西。至少,这是主意。 – 2013-05-04 18:52:06

+0

我甚至都不在学校。我只是一个使用新波士顿java教程的青少年,我只是在玩弄我学到的东西 – user2350474 2013-05-04 19:34:26

1

有几种特殊情况需要注意。你似乎不看任何人:

y = a*x^2 + b*x + c 
  1. 如果二次项系数a是零的话,只有一个根,因为方程是线性的:y = b*x + c
  2. 如果线性系数b是零,有两个根:[x1, x2] = +/-sqrt(c)
  3. 如果常量系数c为零时,根源之一是零且另一个是-b/a

如果判别式为负数,则有两个复共轭根。

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