Java类求解一元二次方程的根

 佟强 http://blog.csdn.net/microtong
 OakCMS内容管理系统 http://www.oakcms.cn http://www.oakcms.net

 

一元二次方程ax2+bx+c=0,输入a,b,c三个系数,求解方程,结果有三种情况:两个实数根、一个实数根、两个复数根。

 

/**
 * Equation.java
 */
package cn.edu.uibe.oop;
/**
 * 计算一元二次方程的根
 * @author TongQiang
 *
 */
public class Equation {
 double a,b,c; //方程的系数
 double x1,x2; //两个根
 double r;     //实部
 double v;     //虚部
 int type;     //0表示一个根,1表示两个实根,2表示两个复数的根
 public Equation(double a,double b,double c){
  this.a = a;
  this.b = b;
  this.c = c;
 }
 private double delta(){
  return b*b-4*a*c;
 }
 public void calculate(){
  double d = delta();
  if(Math.abs(d) < 1E-5){
   type = 0;
   x1 = -b/(2*a);
   x2 = x1;
  }else if(d > 0){
   type = 1;
   x1 = (-b+Math.sqrt(d))/(2*a);
   x2 = (-b-Math.sqrt(d))/(2*a);
  }else{
   type = 2;
   r =  -b/(2*a);
   v = Math.sqrt(-d)/(2*a);
  }
 }
 public void showResult(){
  switch(type){
  case 0:
   System.out.println("方程只有一个实根,x1=x2="+x1);
   break;
  case 1:
   System.out.println("方程有两个实根,分别是:x1="+x1+"/tx2="+x2);
   break;
  case 2:
   System.out.println("方程有两个复数根,分别是:"+r+"+"+v+"i,/t"+r+"-"+v+"i");
   break;
  }
 }

 public static void main(String[] args) {
  Equation eq1 = new Equation(1,2,2);
  eq1.calculate();
  eq1.showResult();
  Equation eq2 = new Equation(1,-2,1);
  eq2.calculate();
  eq2.showResult();
  Equation eq3 = new Equation(1,6,5);
  eq3.calculate();
  eq3.showResult();
 }

}

 佟强 http://blog.csdn.net/microtong
 OakCMS内容管理系统 http://www.oakcms.cn http://www.oakcms.net

 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值