今天学习了利用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));
}
}