这是我的主要课程:
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。知道我做错了吗?
答案 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)
当您最不期望它时,整数算术会让您感到惊讶,我认为没有理由将a
,b
和c
限制为int
- s。< / p>
好的,希望这会有所帮助。
答案 1 :(得分:1)
您需要注意几个特殊情况。你似乎没有注意到它们中的任何一个:
y = a*x^2 + b*x + c
a
为零,则只有一个根,因为方程是线性的:y = b*x + c
。b
为零,则有两个根:[x1, x2] = +/-sqrt(c)
c
为零,则其中一个根为零,另一个为-b/a
。如果判别式为负,则有两个复共轭根。
有趣的是,所有这些情况对于物理问题的解决方案都有意义,如阻尼谐波运动和L-C-R电路。你也应该了解一些这些。
答案 2 :(得分:0)
由于这看起来有点像家庭作业,我只会提示:
NaN
是数学函数返回的结果,由于某种原因,无论是技术还是数学,结果都无法准确地表示为数字。