为何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
相关产品推荐
相关产品推荐

