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

为何Circle类中的变量始终存储0值?附相关Java代码

为何Circle类中的变量始终存储0值?

先把你提供的相关代码贴出来:

主方法代码

public static void main(String[] args) { 
    float radius; 
    Scanner in = new Scanner(System.in); 
    Circle c = new Circle(); // Circle Class object 
    System.out.print("\nEnter Circle Radius : "); 
    radius = in.nextFloat(); 
    c.SetRadius(radius); // Passing radius value.. 
    c.display(); 
}

Circle类代码(你提供的片段)

Class Circle { 
    private float radius; 
    float area , circumference; 
    float pi = 3.14f; 
    public void SetRadius(float r) { 
        radius = r; 
    } 
    float getRa // 代码不完整
}

问题根源分析

你遇到的核心问题是**area和circumference这两个变量从来没有根据设置的radius进行计算**:

  • 在Java中,float类型的成员变量默认初始值是0.0f,你只是声明了area和circumference,但没有在设置半径后更新它们的值,所以它们会一直保持初始的0值。
  • 另外提个小细节:Java里类的关键字是小写的class,你写的Class是语法错误,不过这不是导致0值的直接原因,需要修正。

解决办法

我给你几种可行的解决方案,你可以根据需求选择:

方案1:设置半径时同步计算面积和周长

在SetRadius方法里,设置完半径后立刻计算area和circumference,这样后续调用display时就能拿到正确的值:

class Circle { 
    private float radius; 
    float area, circumference; 
    float pi = 3.14f; 

    public void SetRadius(float r) { 
        radius = r;
        // 同步计算面积和周长
        area = pi * radius * radius;
        circumference = 2 * pi * radius;
    } 

    // 补全getRadius方法
    float getRadius() {
        return radius;
    }

    public void display() {
        System.out.println("半径:" + radius);
        System.out.println("面积:" + area);
        System.out.println("周长:" + circumference);
    }
}

方案2:在display方法中实时计算

这种方式更灵活,每次调用display都会用当前最新的radius计算,避免后续如果修改了半径但忘记更新面积周长的问题:

class Circle { 
    private float radius; 
    float pi = 3.14f; 

    public void SetRadius(float r) { 
        radius = r;
    } 

    float getRadius() {
        return radius;
    }

    public void display() {
        // 实时计算,不需要把area和circumference作为成员变量
        float area = pi * radius * radius;
        float circumference = 2 * pi * radius;
        System.out.println("半径:" + radius);
        System.out.println("面积:" + area);
        System.out.println("周长:" + circumference);
    }
}

方案3:用Getter方法封装计算(推荐)

遵循Java的封装原则,不直接暴露area和circumference成员变量,而是通过getter方法实时计算返回,这样更符合面向对象的设计规范:

class Circle { 
    private float radius; 
    float pi = 3.14f; 

    // 建议按照Java命名规范改成小驼峰:setRadius
    public void setRadius(float r) { 
        radius = r;
    } 

    public float getRadius() {
        return radius;
    }

    public float getArea() {
        return pi * radius * radius;
    }

    public float getCircumference() {
        return 2 * pi * radius;
    }

    public void display() {
        System.out.println("半径:" + getRadius());
        System.out.println("面积:" + getArea());
        System.out.println("周长:" + getCircumference());
    }
}

最后再提个小建议:Java的命名规范里,方法名和变量名一般用小驼峰(首字母小写,后续单词首字母大写),所以SetRadius建议改成setRadius,这样代码更易读哦。

内容的提问来源于stack exchange,提问作者Umar Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:23:34