如何指导学生编写一个名为 MyMath 的类,该类能够计算圆的周长和面积,以及球的表面积和体积?并请提供相应的测试用例来验证这些功能的实现是否准确无误。
时间: 2024-10-23 15:18:33 浏览: 14
首先,指导学生创建一个名为`MyMath`的类,这个类可以包含两个内部类,分别对应于`Circle`和`Sphere`,用于表示几何形状。下面是步骤和代码示例:
1. 定义`Circle`类:
```java
public class Circle {
private double radius;
// 构造函数
public Circle(double radius) {
this.radius = radius;
}
// 计算周长和面积的公共方法
public double circumference() {
return 2 * Math.PI * radius;
}
public double area() {
return Math.PI * Math.pow(radius, 2);
}
}
```
2. 定义`Sphere`类:
```java
public class Sphere {
private double radius;
// 构造函数
public Sphere(double radius) {
this.radius = radius;
}
// 计算表面积和体积的公共方法
public double surfaceArea() {
return 4 * Math.PI * Math.pow(radius, 2);
}
public double volume() {
return (4 / 3) * Math.PI * Math.pow(radius, 3);
}
}
```
3. 在`MyMath`类中包含这两个内部类的实例,并提供公共方法访问它们的功能:
```java
public class MyMath {
private Circle circle;
private Sphere sphere;
// 构造函数
public MyMath(double circleRadius, double sphereRadius) {
circle = new Circle(circleRadius);
sphere = new Sphere(sphereRadius);
}
// 提供公共方法来获取圆的周长、面积,球的表面积和体积
public double getCircleCircumference() {
return circle.circumference();
}
public double getCircleArea() {
return circle.area();
}
public double getSphereSurfaceArea() {
return sphere.surfaceArea();
}
public double getSphereVolume() {
return sphere.volume();
}
}
```
测试用例:
```java
public static void main(String[] args) {
MyMath math = new MyMath(5, 10);
System.out.println("Circle circumference: " + math.getCircleCircumference());
System.out.println("Circle area: " + math.getCircleArea());
System.out.println("Sphere surface area: " + math.getSphereSurfaceArea());
System.out.println("Sphere volume: " + math.getSphereVolume());
// 验证数学结果
double expectedCircleCircumference = 31.41592653589793; // π * 2 * 5
double expectedCircleArea = 78.53981633974483; // π * 5^2
double expectedSphereSurfaceArea = 1570.7963267948966; // 4 * π * 10^2
double expectedSphereVolume = 4188.7902047863905; // (4/3) * π * 10^3
assertMathResults(math, expectedCircleCircumference, expectedCircleArea, expectedSphereSurfaceArea, expectedSphereVolume);
}
// 自定义断言方法
private static void assertMathResults(MyMath math, double... expectedValues) {
for (int i = 0; i < expectedValues.length; i += 2) {
double calculatedValue = math.getResult(i);
double expectedValue = expectedValues[i];
assertEquals(calculatedValue, expectedValue, 0.0001); // 精确到四位小数
}
}
```
在这个测试用例中,我们先创建了一个`MyMath`实例,然后分别获取圆和球的属性值,并将结果与预期值进行比较,如果相差在设定的小范围内,则认为功能实现准确无误。
阅读全文