【问题标题】:I am getting NaN for an answer to my quadratic equation calculator- JAVA我得到 NaN 来回答我的二次方程计算器 - JAVA
【发布时间】:2013-04-28 23:15:23
【问题描述】:

这是我的主要课程:

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

【问题讨论】:

  • NaN 不是数字 - 如果有帮助的话
  • 你可以把b*-1改成-b,看起来干净一些
  • 旁注:我不是Java专家,但真的有必要使用三个扫描仪吗?
  • 另外注意:注意操作顺序:double finalanswer = numerator/(2*a);
  • 你忘了问问题。这让人很难回答。你期待什么?

标签: math nan equation quadratic


【解决方案1】:

由于这看起来有点像家庭作业,所以我只提供一个提示:

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

【讨论】:

  • 这就是我作为评论发表的内容 - 我不太确定是否应该将其视为答案
  • @ScottSelby True - 在我发布此内容之前我没有看到您的评论。不过,答案应该足以帮助发帖者摆脱困境,同时还能让他学到一些东西。至少,是这样的想法。
  • 我什至不在学校。我只是一个使用 thenewboston 的 java 教程的青少年,我只是在玩我学到的东西
【解决方案2】:

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

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

如果b*b - 4*a*c 为负数(方程无解),则平方为 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。


好的,希望这有帮助。

【讨论】:

  • 我想我明白了。我为 sqrt 内部的内容创建了一个单独的变量,称为 root。我做了那个绝对值,然后平方。双x1;双根 = Math.abs(bb - 4*ac);双平方 = Math.sqrt(root);
  • 没有。 b*b - 4*a*c 是负数,那么你的方程没有真正的解。见en.wikipedia.org/wiki/Quadratic_equation#Discriminant
【解决方案3】:

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

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 电路等物理问题都有意义。你也应该对这些有所了解。

【讨论】:

    猜你喜欢
    • 2015-03-12
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2022-12-03
    • 2021-06-30
    • 2014-10-19
    相关资源
    最近更新 更多