You need to enable JavaScript to run this app. Java构造器radius参数未传递 圆属性计算全部返回0.0问题
优惠活动
大模型
产品
解决方案
定价
更多

Java构造器radius参数未传递 圆属性计算全部返回0.0问题

问题原因分析
  • 核心问题:CircleData类的radius成员从未被赋值
    你在CircleData中虽然读取了用户输入的半径r,也创建了CircleCalculator对象传入了r,但CircleCalculator类的radius是它自己的私有属性,和CircleData类自己定义的radius变量完全是两个独立的变量,CircleData自己的radius没有被赋值,默认初始值就是0.0,后续所有面积、周长的计算都是基于这个0值,所以输出全是0。
  • 额外的结构逻辑问题
    • 类职责混乱:不需要同时定义CircleCalculator和CircleData两个类来处理圆的计算,结构冗余
    • Scanner重复实例化:main方法里已经创建了Scanner对象,CircleData里又重复创建了新的Scanner实例,属于不必要的操作
    • 访问器权限错误:get类的访问器方法定义为private,不符合封装的规范,外部类正常情况下无法调用
修正方案

你可以直接简化类结构,把所有圆的属性和计算逻辑放在同一个类里即可,修正后的代码如下:

// 导入Scanner读取键盘输入
import java.util.Scanner;

class CircleCalculator
{
    private final double pi = 3.1415;
    private double radius;

    // 构造器接收半径参数
    public CircleCalculator(double r)
    {
        radius = r;
    }

    // 访问器:获取半径
    public double getRadius()
    {
        return radius;
    }

    // 修改器:修改半径
    public void setRadius(double r)
    {
        this.radius = r;
    }

    // 计算面积
    public double getArea()
    {
        return pi * radius * radius;
    }

    // 计算直径
    public double getDiameter()
    {
        return 2 * radius;
    }

    // 计算周长
    public double getCircumference()
    {
        return 2 * pi * radius;
    }

    public static void main(String[] args) 
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\n欢迎来到Cam的魔法圆计算器!");
        System.out.println("\n请输入圆的半径:");
        
        double inputRadius = keyboard.nextDouble();
        // 用输入的半径创建计算器对象
        CircleCalculator circle = new CircleCalculator(inputRadius);

        System.out.println("\n半径为 " + circle.getRadius() + " 的圆的各项参数如下:\n" +
                    "\t面积:" + circle.getArea() +" 平方单位\n" +
                    "\t直径:" + circle.getDiameter() +" 单位\n" +
                    "\t周长:" + circle.getCircumference() +" 单位\n");
        keyboard.close();
    }
}
修正说明
  • 把所有圆的属性、构造器、访问器、计算方法都整合到CircleCalculator一个类中,逻辑更清晰
  • 构造器接收半径参数后直接赋值给当前类的radius成员,不会再出现值没有传递的问题
  • 补充了setRadius修改器方法,满足修改器的使用需求
  • 所有访问器方法改为public符合封装规范
  • 关闭了Scanner资源避免内存泄漏

内容的提问来源于stack exchange,提问作者Cameron Brooks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 01:45:08