0

这是我的主要课程:

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。知道我做错了什么吗?

4

3 回答 3

2

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

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

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


您可以通过首先检查是否存在b*b - 4*a*c < 0以及是否存在来改进您的计算器,然后您可以写信给控制台说没有真正的解决方案(当然在那里停止计算)。


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

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

当你最不期待的时候,整数算术会让你大吃一惊,我看不出为什么a,应该限制为-s。bcint


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

于 2013-05-04T19:38:33.430 回答
1

有几种特殊情况需要注意。您似乎没有注意其中的任何一个:

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

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

有趣的是,所有这些情况对于解决阻尼谐波运动和 LCR 电路等物理问题都有意义。你也应该对这些有所了解。

于 2013-05-04T23:48:42.700 回答
0

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

NaN是当结果由于某种原因(技术或数学)无法准确表示为数字时,数学函数返回的内容。

于 2013-05-04T18:48:53.227 回答