定义一个方程类,以求方程的两个实数根。请将测试主类和方程类定义在不同的包中
时间: 2024-10-24 07:06:34 浏览: 21
在Java中,我们可以创建一个`Equation`类来处理求解二次方程的情况,并将其放在一个名为`math.equations`的包中。然后,在另一个包`test.maths`中创建一个`MainTest`类来进行测试。以下是简单的实现:
首先,定义`math.equations`包下的`QuadraticEquation`类:
```java
package math.equations;
import java.util.ArrayList;
import java.util.List;
public class QuadraticEquation {
private double a;
private double b;
private double c;
// 构造函数
public QuadraticEquation(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
// 求解二次方程的判别式
private double discriminant() {
return Math.pow(b, 2) - 4 * a * c;
}
// 计算两个实数根
public List<Double> solve() {
double root1, root2;
if (discriminant() > 0) {
root1 = (-b + Math.sqrt(discriminant())) / (2 * a);
root2 = (-b - Math.sqrt(discriminant())) / (2 * a);
List<Double> roots = new ArrayList<>();
roots.add(root1);
roots.add(root2);
return roots;
} else if (discriminant() == 0) {
double root = -b / (2 * a);
List<Double> roots = new ArrayList<>();
roots.add(root);
return roots;
} else { // 复数根
double realPart = -b / (2 * a);
double imaginaryPart = Math.sqrt(-discriminant()) / (2 * a);
List<Double> roots = new ArrayList<>();
roots.add(realPart);
roots.add(realPart + imaginaryPart);
roots.add(realPart - imaginaryPart);
return roots;
}
}
}
```
接下来,创建`test.maths`包下的`MainTest`类来进行测试:
```java
package test.maths;
import org.junit.Test;
import math.equations.QuadraticEquation;
import static org.junit.Assert.assertEquals;
public class MainTest {
@Test
public void testSolve() {
QuadraticEquation eqn = new QuadraticEquation(1, -3, 2);
List<Double> roots = eqn.solve();
// 测试方程 x^2 - 3x + 2 = 0 的实数根
assertEquals(2, roots.size());
assertEquals(2.0, roots.get(0), 0.0001);
assertEquals(1.0, roots.get(1), 0.0001);
// 可自行添加其他测试用例,例如测试负判别式或零判别式的场景
}
}
```
在这个例子中,我们定义了一个处理二次方程的类,当测试类需要访问这个功能时,它通过导入`math.equations`包的方式引入了`QuadraticEquation`类。
阅读全文