Java 如何编程实现一元二次方程的求解

如何用java编写一元二次方程的求根问题~

public class SquareEquation {
double a, b, c;
public void setA(double a) {
this.a = a;
}
public void setB(double b) {
this.b = b;
}
public void setC(double c) {
this.c = c;
}
public double getRootOne() {
double disk = calculateValidDisk();
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("不是二次方程", EquationException.NONE_EQUATION);
}
double disk = b * b - 4 * a * c;
if (disk < 0) {
throw new EquationException("没有实根", EquationException.NO_REALROOT);
}
return disk;
}
}

扩展资料
比如 方程是 x平方+3x+2=0;
public class Test
{
public static void main(String []args)
{
double a=1;//二次项系数
double b=3;//一次项系数
double c=2;//常数项
double s=b*b-4*a*c;
if(s<0)
{
System.out.print("b*b-4ac<0,方程无解!");
return;
}
double ss=Math.sqrt(s);
double x1=(-1*b-ss)/(2*a);
double x2=(-1*b+ss)/(2*a);
System.out.println("x1="+x1);
System.out.println("x2="+x2);
}
}
参考资料:百度百科 Java
百度百科 一元二次方程

public class Equation {
private double a, b, c;

public Equation(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}

public static void main(String[] args) throws Exception {
//j*(j-1) = 40;
//j*j - j - 40 =0
double[] results = new Equation(1, -1, -40).analyze();
for(int i = 0; i < results.length; i++){
System.out.println("j = " + results[i]);
}

}

public double[] analyze() throws Exception {
double delt = b * b - 4 * a * c;

if (delt < 0) {
throw new Exception("NO result");
} else if (delt == 0) {
double[] ary = { -b / (2 * a) };
return ary;
} else {
double[] ary = new double[2];
ary[0] = (-b + Math.sqrt(delt)) / (2 * a);
ary[1] = (-b - Math.sqrt(delt)) / (2 * a);

return ary;
}

}

}
----------testing
j = 6.84428877022476
j = -5.84428877022476

//求解一元二次方程ax^2+bx+c=0的实根和复根,Test类是主类
class OnceBasicQuadraticEquation //求解一元二次方程ax^2+bx+c的实根和复根的类,其中getRoot()方法求根和显示根
{
private double a; //方程的二次项系数
private double b; //方程的一次项系数
private static double c; //方程的常数项
//以上三个成员变量分别是方程的系数

OnceBasicQuadraticEquation() //无参构造方法
{
a = 0;
b = 0;
c = 0;
}

OnceBasicQuadraticEquation(double a,double b,double c) //有参构造方法
{
this.a = a;
this.b = b;
this.c = c;
}

public void setA(double a)
{
this.a = a;
}

public double getA()
{
return a;
}

public void setB(double b)
{
this.b = b;
}

public double getB()
{
return b;
}

public void setC(double c)
{
this.c = c;
}

public double getC()
{
return c;
}
//以上六个方法分别对应三个系数的置取方法

public double getDlt() //计算判别式Δ=b^2-4ac的值
{
double result = Math.pow(b,2) - 4 * a * c;
return result;
}

private double getRightRoot() //求解右侧较大实根的方法
{
double rightRoot = 0;
rightRoot = (-b + Math.sqrt(getDlt())) / (2 * a);
return rightRoot;
}

private double getLeftRoot() //求解左侧较小实根的方法
{
double leftRoot = 0;
leftRoot = (- b - Math.sqrt(getDlt())) / (2 * a);
return leftRoot;
}

public void getRoot() //求解并显示实根或复根的方法
{
if(a==0)
{
if(b==0)
{
if(c==0)
{
System.out.println("一元二次方程:" + getA() + "x^2+" //a、b、c全为零时,定义方程有无穷多解。
+ getB() + "x+"
+ getC() + "\t有无穷多解。");
}
else
{
//二次项和一次项系数为零,但常数项不为零,方程变为不等式,无解。
System.out.println("一元二次方程:" + getA() + "x^2+"
+ getB() + "x+"
+ getC() + "\t无解。");
}
}
else
{
//二次项系数为零,一次项系数不为零,方程是一次方程,有唯一解。
double result = 0;
result = -getC() / getB();
System.out.println("一元二次方程:" + getA() + "x^2+"
+ getB() + "x+"
+ getC() + "\t有唯一解:" + result);
}
}
else //二次项系数不为零,方程有两个实根或复根。
{
if(getDlt()==0) //判别式Δ=b^2-4ac=0,方程有两个相等实根。
{
double result = 0;
result = -getB() / (2 * getA());
System.out.println("一元二次方程:" + getA() + "x^2+"
+ getB() + "x+"
+ getC() + "\t有唯一解:" + result);
}
else if(getDlt()>0) //判别式Δ=b^2-4ac>0,方程有两个相异实根。
{
System.out.println("一元二次方程:" + getA() + "x^2+"
+ getB() + "x+"
+ getC() + "\t有两个实根:" + getLeftRoot() + "和" + getRightRoot());
}
else //判别式Δ=b^2-4ac<0,方程有两个复根。
{
//double imaginaryNumber1 = 0;
double imaginaryNumber = 0;
double realNumber = 0;
imaginaryNumber = Math.sqrt(-getDlt()) / (2 * a);
realNumber = -getB() / (2 * a);
System.out.println("一元二次方程:" + getA() + "x^2+"
+ getB() + "x+"
+ getC() + "\t有两个复根:"
+ realNumber + "±" + imaginaryNumber + "i");
}
}
}
}

public class Test
{
public static void main(String [] args)
{
OnceBasicQuadraticEquation e1 = new OnceBasicQuadraticEquation(4,13,3);
e1.getRoot();

}
}

相关兴趣推荐

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网