JAVA求一元二次方程的根,简单问题

import java.lang.Math.*;
class wp{
private float a,b,c,realpart,imagpart,disc;
wp(){
a=Input.readFloat();
b=Input.readFloat();
c=Input.readFloat();
}
void solve(){
realpart=-(b/(2*a));
imagpart=(sqrt(-(b*b-4*a*c))/(2*a));
if(abs(a)<=0.000001){
System.out.println("Is not a quadratic!");
}
else{
System.out.println("It is a quadratic");
disc=b*b-4*a*c;

if(abs(disc)<=0.0000001){
System.out.println("has two equal roots="+(realpart+imagpart));
}
else if(disc>0.0000001)
System.out.println("has distinct real roots="+(realpart+imagpart)+"+"+(realpart-imagpart));
else
System.out.println("has complex roots="+(realpart+imagpart)+"+"+(realpart-imagpart));
}
}
public static void main(String[] args){
wp w=new wp();
w.solve();
}
}

其中总说sqrt, abs找不到符号。是导入错误的类了吗 ???

还有一个问题就是当判别式〈0时,一元二次方程的根该怎么求呢?
我怎么在计算的过程中会得出“NaN”??
这是什么东西呢?
顺便请大家帮我把我的代码中求虚根的方法改一下。不胜感激!

1、首先你的包确实导入错误,应该是import java.lang.Math;没有后面的*,因为你导入的已经是一个具体的类,所以就不要写后面的*.当你导入的是一个包中所有的类的时候,例如导入lang包下所有的类,就要写成import java.lang.*;
其次,java.lang这个包是java编译是自动导入的,你可以不写这条导入语句,就能正常执行程序
还有,你想调用abs,sqrt这样的方法,这些都是静态方法,虽然不用生成对象,进行调用,但是它们是要用类名进行调用的,你应该写成Math.abs() ;
和Math.sqrt() ;就可以执行了

2、当判别式<0,这个时候就产生虚根了,写起来比较麻烦,算法是这样的
举个简单例子说明吧:
求一元二次方程:x^2+x+1=0的虚根
解:△=1^2-4×1×1=-3
由求根公式x=[-b±√(-△)i]/2a =[-1±√(-△)i]/2=[-1±√3i]/2

3、NAN这个我写一下它的全称你就知道了no a number就是运算结果不是数字,如果你将0作为除数,就能得到这个结果

你的程序我修改了一下

import java.io.*;
class wp{
private double a,b,c,realpart,imagpart,disc;
BufferedReader s1 = new BufferedReader(new InputStreamReader(System.in));
BufferedReader s2 = new BufferedReader(new InputStreamReader(System.in));
BufferedReader s3 = new BufferedReader(new InputStreamReader(System.in));

wp(){
try{
a=Double.valueOf(s1.readLine()) ;
b=Double.valueOf(s2.readLine()) ;
c=Double.valueOf(s3.readLine()) ;
}
catch(Exception e)
{
System.out.println("输入错误!!!") ;
}
}
void solve(){
realpart=-(b/(2*a));
System.out.println(realpart) ;
imagpart=(Math.sqrt(b*b-4*a*c)/(2*a));
System.out.println(imagpart) ;

if(Math.abs(a)<=0.000001){
System.out.println("Is not a quadratic!");
}
else{
System.out.println("It is a quadratic");
disc=b*b-4*a*c;

if(Math.abs(disc)<=0.0000001){
System.out.println("has two equal roots="+(realpart+imagpart));
}
else if(disc>0.0000001)
System.out.println("has distinct real roots="+(realpart+imagpart)+"+"+(realpart-imagpart));
else
System.out.println("has complex roots=");
System.out.print("x1 = "+realpart+"+"+(Math.sqrt(-(b*b-4*a*c))/(2*a)+"i")) ;
System.out.print(" x2="+realpart+"-"+(Math.sqrt(-(b*b-4*a*c))/(2*a)+"i")) ;
}
}
public static void main(String[] args){
wp w=new wp();
w.solve();
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-12-26
判别式〈0时,一元二次方程无根啊!你要求虚根吗?

用JAVA编程求一元二次方程的根,一元二次方程的系数从键盘输入
public class MyTest { \/ 用JAVA编程求一元二次方程的根,一元二次方程的系数从键盘输入 测试用例:a b c 0 1 2 3 10 0 -100 10 0 100 10 50 0 10 -50 0 1 0 0 \/ Test public void test1(){ Double a;Double b;Double c;Scanner s = new Scanner(System.in);System.out.pri...

java怎么求一元二次方程虚根,虚根i怎么定义啊。
当判别式<0,这个时候就产生虚根了,写起来比较麻烦,算法是这样的举个简单例子说明吧: 求一元二次方程:x^2+x+1=0的虚根 解:△=1^2-4×1×1=-3 由求根公式x=[-b±√(-△)i]\/2a =[-1±√(-△)i]\/2=[-1±√3i]\/23、NAN这个我写一下它的全称你就知道了no a number就是运...

如何用java编写一元二次方程的求根问题
return (-b + Math.sqrt(disk)) \/ (2 * a);} public double getRootTwo() { double disk = calculateValidDisk();return (-b - Math.sqrt(disk)) \/ (2 * a);} private double calculateValidDisk() { if (a == 0) { throw new EquationException("不是二次方程", EquationExcept...

java编写程序求一元二次方程的根
else if(b*b=4*a*c){ int i = (-b-cbrt(b^2-4*a*c))\/2\/a System.out.println("只有一个根"+i);vector.add(i);} else if(b*b>4*a*c){ double x1=(-b-cbrt(b^2-4*a*c))\/2\/a double x2=(-b+cbrt(b^2-4*a*c))\/2\/a vector.add(x1);vector.add(x2);} ...

java 求一元二次方程的根
准确的说:是错在了 System.out.println("方程的1根是"+aa.calculator1());System.out.println("方程的2根是"+aa.calculator2());这两句上,因为无法从静态上下文中引用非静态 变量a,b,c,因为你没在double 前声明static ,所以无法引用到a,b,c,的值.即使你在前加了static (static double a,b...

Java 如何编程实现一元二次方程的求解
\/\/求解一元二次方程ax^2+bx+c=0的实根和复根,Test类是主类 class OnceBasicQuadraticEquation \/\/求解一元二次方程ax^2+bx+c的实根和复根的类,其中getRoot()方法求根和显示根 { private double a; \/\/方程的二次项系数 private double b; \/\/方程的一次项系数 private static double...

java用方法 计算一元二次方程的实数根
} public static void main(String[] args) { double a = 1; double b = -3; double c = 2; double[] x = root(a, b, c); System.out.printf("x1=%f,x2=%f", x[0], x[1]); }输出 0.0 原因:Java 中参数是按值传递。实参 x1、x2 传递给方法 root ...

java编程求解一元二次方程,abc用户输入,并确保b*b-*a*c大于等于0,求大...
1)简介 一元二次方程 ax2+bx+c=0 的a、b、c三个参数由用户自行定义,通过该程序输出该一元二次方程的根。 对于该程序需要在“应声虫”的基础上进行参数的自定义,在定义完成后需要通过求根公式实现结果的输出,其中Math.sqrt()为对括号的内容进行开平方根。 2)任务代码 关于该程序的代码如下:i...

java求一元二次方程的根
import java.util.Scanner;public class Test30009{ public static void main(String args[]){ int repeat, ri;int a,b,c,d;double x1 = 0,x2;Scanner in=new Scanner(System.in);repeat=in.nextInt();for(ri = 1; ri <= repeat; ri++){ a=in.nextInt();b=in.nextInt();c=in...

跪求计算机JAVA大神用eclipse解一元二次方程,求答案,基础一点,蟹蟹
public static void main(String[] args) throws Exception { \/\/ 标准格式: ax^2+bx+c=0 double[] xs=solve(4,4,0);\/\/这里参数即一元二次方程的三个系数a,b,c if(xs==null)System.out.println("解数:0");else { System.out.println("解数:"+xs.length);for(int i=0;i<xs....

相似回答