java用mvc写一个一元二次方程,要有测试类,并给代码注释一下
时间: 2024-03-09 12:50:24 浏览: 96
一元二次方程 程序测试
4星 · 用户满意度95%
好的,以下是一个使用MVC模式实现一元二次方程的Java代码,包括一个测试类和注释:
Model(模型):
```java
public class QuadraticEquation {
private double a;
private double b;
private double c;
private double discriminant;
private double root1;
private double root2;
public QuadraticEquation(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
this.discriminant = b * b - 4 * a * c;
if (discriminant >= 0) {
this.root1 = (-b + Math.sqrt(discriminant)) / (2 * a);
this.root2 = (-b - Math.sqrt(discriminant)) / (2 * a);
}
}
public double getA() {
return a;
}
public double getB() {
return b;
}
public double getC() {
return c;
}
public double getDiscriminant() {
return discriminant;
}
public double getRoot1() {
return root1;
}
public double getRoot2() {
return root2;
}
}
```
View(视图):
```java
import java.util.Scanner;
public class QuadraticEquationView {
private Scanner scanner;
public QuadraticEquationView() {
scanner = new Scanner(System.in);
}
public double[] getInput() {
System.out.println("请输入一元二次方程的系数(a、b、c):");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
return new double[]{a, b, c};
}
public void printResult(double[] roots, double discriminant) {
if (discriminant > 0) {
System.out.println("该一元二次方程有两个实数根:");
System.out.printf("x1 = %.2f, x2 = %.2f\n", roots[0], roots[1]);
} else if (discriminant == 0) {
System.out.println("该一元二次方程有一个实数根:");
System.out.printf("x1 = x2 = %.2f\n", roots[0]);
} else {
System.out.println("该一元二次方程没有实数根,但有两个虚数根:");
System.out.printf("x1 = %.2f + %.2fi, x2 = %.2f - %.2fi\n", roots[0], Math.sqrt(-discriminant), roots[1], Math.sqrt(-discriminant));
}
}
}
```
Controller(控制器):
```java
public class QuadraticEquationController {
private QuadraticEquation model;
private QuadraticEquationView view;
public QuadraticEquationController(QuadraticEquation model, QuadraticEquationView view) {
this.model = model;
this.view = view;
}
public void run() {
double[] input = view.getInput();
model = new QuadraticEquation(input[0], input[1], input[2]);
double[] roots = new double[]{model.getRoot1(), model.getRoot2()};
double discriminant = model.getDiscriminant();
view.printResult(roots, discriminant);
}
}
```
Main(主函数):
```java
public class Main {
public static void main(String[] args) {
QuadraticEquation model = new QuadraticEquation(0, 0, 0);
QuadraticEquationView view = new QuadraticEquationView();
QuadraticEquationController controller = new QuadraticEquationController(model, view);
controller.run();
}
}
```
Test(测试类):
```java
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class QuadraticEquationTest {
@Test
public void testQuadraticEquation() {
QuadraticEquation qe = new QuadraticEquation(1, -5, 6);
assertEquals(2.0, qe.getRoot1(), 0.001);
assertEquals(3.0, qe.getRoot2(), 0.001);
assertEquals(1.0, qe.getDiscriminant(), 0.001);
qe = new QuadraticEquation(1, -2, 1);
assertEquals(1.0, qe.getRoot1(), 0.001);
assertEquals(1.0, qe.getRoot2(), 0.001);
assertEquals(0.0, qe.getDiscriminant(), 0.001);
qe = new QuadraticEquation(2, 3, 4);
assertEquals(0.0, qe.getRoot1(), 0.001);
assertEquals(0.0, qe.getRoot2(), 0.001);
assertEquals(-23.0, qe.getDiscriminant(), 0.001);
}
}
```
注释:
1. 在 Model 中,我们定义了一个 QuadraticEquation 类,用于计算一元二次方程的根和判别式。
2. 在 View 中,我们定义了一个 QuadraticEquationView 类,用于从用户那里获取输入,并将结果输出到控制台。
3. 在 Controller 中,我们定义了一个 QuadraticEquationController 类,用于协调 Model 和 View 之间的交互。
4. 在 Main 中,我们创建了 Model、View 和 Controller 的实例,并调用 Controller 的 run() 方法来运行应用程序。
5. 在 Test 中,我们使用 JUnit 框架编写了一个测试类,用于测试 QuadraticEquation 类的方法是否正确。
使用 MVC 模式可以将应用程序分成三个部分,使得代码更加清晰、易于维护和扩展。
阅读全文