我使用数组列表来保存不同形状的对象,这些对象是抽象超类的子类。超类包含两个抽象方法:分别是surface_area和volume。将对象添加到数组列表后,我想使用 toString 方法的重写将表面积和体积方法的结果打印到控制台。然而,当运行代码时,我只得到 0.0 的值而不是实际值。我做错了什么?
public abstract class Shape {
abstract double surface_area();
abstract double volume();
}
public class Sphere extends Shape {
public double radius = 5;
private double sphere_Volume;
public double sphere_SA;
@Override
public double surface_area() {
sphere_SA = (4 * Math.PI * Math.pow(radius, 2));
return sphere_SA;
}
@Override
public double volume() {
sphere_Volume = (4/3 * Math.PI * Math.pow(radius, 3));
return sphere_Volume;
}
@Override
public String toString() {
String SA_String = String.valueOf(sphere_SA);
return SA_String;
}
}
import java.util.ArrayList;
public class ShapeArray {
public static void PrintShape (ArrayList<Shape> shapeArray) {
for (int i = 0; i < shapeArray.size(); ++i) {
System.out.println(shapeArray.get(i));
}
}
public static void main(String[] args) {
ArrayList<Shape> shapeArray = new ArrayList<Shape>();
shapeArray.add(new Sphere());
shapeArray.add(new Cylinder());
shapeArray.add(new Cone());
PrintShape(shapeArray);
}
}
我通过创建球体对象的实例并使用 .get 方法查看 sphere_SA 值来测试表面积和体积函数,看看它们是否正确运行,但是,当通过 PrintArray 函数运行它时,它是正确的,它只返回零。
我想通了。我没有将变量 (SA_string) 分配给我想要转换的值,而是简单地将函数移至 string.valueOf() 方法中。
公共类球体扩展形状{ 公共双半径 = 5;
@Override
public double surface_area() {
return (4 * Math.PI * Math.pow(radius, 2));
}
@Override
public double volume() {
return (4/3 * Math.PI * Math.pow(radius, 3));
}
@Override
public String toString() {
String SA_String = String.valueOf(surface_area());
String volume_String = String.valueOf(volume());
return "Sphere of radius " + radius + ": Surface area = " + SA_String + ", Volume = " + volume_String;
}
}