Java求解一元二次方程详解

  今天学习了利用java求解一元二次方程。

  从面向对象的角度去解决这个问题。

  需要两个对象,即类 求根类(EqualRoots) 和 测试类(EqualRootsTest)

  类的设计

        成员方法

              求根方法(EqualRoots,public)

              输入:三个参数double a,b,c

              输出:数组(是否有根,根1,根2)

              逻辑:1. 创建一个长度为3的数组RetArray,并初始化为0

                         2. 调用getDelta()方法

                         3. 如果第二步获取的返回值小于0,返回RetArray

                         4. 如果第二步获取的返回值大于等于0,根据求根公式  求出 x1,x2

                         5. 将x1,x2放入数组RetArray,对应数组的第一个和第二个元素

              判别式方法(getDelta,private)

              输入:三个参数double a,b,c

              输出:int 取值(1,0)

              逻辑:1. 声明一个int标记 flag

                         2. 计算判别式b*b-4*a*c

                         3.判断判别式是否小于0,是则返回flag=0

                         4.返回flag

编码实现

public class EqualRoots {
    //求解delta
    private double getDeltaValue(double a, double b, double c) {
        return b*b - 4*a*c;
    }

    //
    private int getDelta(double a, double b, double c) {
        int flag = 1;
        double delta = getDeltaValue(a,b,c);
        if (delta < 0.001) {
            flag = 0;
            return flag;
        }
      return flag;
    }

    //求解根
    public double[] EqualRoots(double a, double b, double c) {
        double[] retArray = {0.0,0.0,0.0};
        int delta = getDelta(a,b,c);
        if (delta < 0) {
            return retArray;
        }
        retArray[0] = 1.0;
        retArray[1] = ((-b + Math.sqrt(getDeltaValue(a,b,c))) / (2*a));
        retArray[2] = ((-b - Math.sqrt(getDeltaValue(a,b,c))) / (2*a));
        return retArray;
    }
}
public class EqualRootsTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入第一个参数a:");
        double a = sc.nextDouble();
        System.out.print("请输入第二个参数b:");
        double b = sc.nextDouble();
        System.out.print("请输入第三个参数c:");
        double c = sc.nextDouble();
        EqualRoots er = new EqualRoots();
        double[] array = er.EqualRoots(a,b,c);
        System.out.println(Arrays.toString(array));
    }
}
  • 7
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值