JAVA求一元二次方程的根,简单问题
importjava.lang.Math.*;classwp{privatefloata,b,c,realpart,imagpart,disc;wp(){a=Input....
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”??
这是什么东西呢?
顺便请大家帮我把我的代码中求虚根的方法改一下。不胜感激! 展开
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”??
这是什么东西呢?
顺便请大家帮我把我的代码中求虚根的方法改一下。不胜感激! 展开
2个回答
展开全部
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();
}
}
其次,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();
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询