使用覆盖 toString 方法时获取错误的值

问题描述 投票:0回答:1

我使用数组列表来保存不同形状的对象,这些对象是抽象超类的子类。超类包含两个抽象方法:分别是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 函数运行它时,它是正确的,它只返回零。

arraylist abstract-class tostring
1个回答
0
投票

我想通了。我没有将变量 (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;
}

}

© www.soinside.com 2019 - 2024. All rights reserved.