You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重写toString方法输出Shape子类属性时获0.0错误值求助

问题原因与解决方法

核心问题

你代码里的sphere_SA、sphere_Volume这些成员变量,只有在调用surface_area()、volume()方法时才会被赋值。但遍历ArrayList打印对象时,只是直接调用了toString(),并没有触发这两个计算方法,所以变量还是默认的初始值0.0。

最优解决方案

直接在toString()里调用计算方法,不要依赖成员变量存储结果。这样每次打印都会实时计算,既避免了忘记调用方法的问题,还能省去多余的成员变量。

修改后的Sphere类示例:

public class Sphere extends Shape {
    public double radius = 5;
    
    @Override
    public double surface_area() {
        return 4 * Math.PI * Math.pow(radius, 2);
    }

    @Override
    public double volume() {
        // 注意:4/3是整数除法,要写成4.0/3才会得到正确的小数结果
        return 4.0/3 * Math.PI * Math.pow(radius, 3);
    }
    
    @Override
    public String toString() {
        return String.format("球体:表面积=%.2f,体积=%.2f", surface_area(), volume());
    }
}

额外提示

  1. 把4/3改成4.0/3,否则整数除法会导致体积计算错误(结果会是1*π*r³,而不是正确的三分之四)。
  2. 其他形状(Cylinder、Cone)也可以照搬这个逻辑,在toString()里直接调用对应的计算方法,就能输出正确的数值。

内容的提问来源于stack exchange,提问作者Kaleb Weikel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:22:35