中易网

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

答案:2  悬赏:40  
解决时间 2021-03-02 08:33
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();
}
}
全部回答
判别式〈0时,一元二次方程无根啊!你要求虚根吗?
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
王者荣耀甄姬2周年皮肤怎么获取
推荐一下一些很有爱的动漫(不看漫画版的)
下列关于神经和神经纤维的叙述中,不正确的是
杨记盐水鸭分店地址在什么地方,想过去办事
有哪些电视剧值得再看一遍
淮北矿业集团工程建设公司钻探分公司地址在什
怀孕34天总是轻微的腹痛该注意什么
企业参与垃圾分类是机遇还是鸡肋
廖家沟在什么地方啊,我要过去处理事情
怎么鉴定轮胎真假
心慌,吃完中药可以吃稳心丸吗
油箱底下怎么会漏机油呢?
重庆有招驾驶员的单位吗?
一个 vps 一个月 2000G流量正常吗?
观澜到坑梓坐公交要多久呀
推荐资讯
为什么我和男友谈恋爱时候 我脸上长痘痘 分手
我这个配置能用WII模拟器玩怪物猎人吗?
黄豆茬能值油葵吗
振兴照相馆怎么去啊,有知道地址的么
郭墅烈士陵园地址在哪,我要去那里办事
怎么把几个word文档放入一个ex ca̳
关于山地自行车V刹问题,刚买的时候手感轻刹
电脑的电源功率跟费电有关系吗?
吕梁行政学院柳林分院地址在什么地方,想过去
胆源村怎么去啊,有知道地址的么
公安机关对犯罪嫌疑人发了逮捕令就一定会坐牢
重庆市长寿区田园种子经营部在什么地方啊,我
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?