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

重命名文件后Java立方体Demo运行失败,calcCubeArea方法无法调用求助

问题排查与修复方案

1. 最核心错误:实例化了错误的类

你在主类里创建的是keelanbaxter_185A01_Cubedemo的对象,但实际包含立方体计算方法(calcCubeArea、calcCubeVolume)的是keelanbaxter_185A01_Cube类。必须实例化Cube类的对象,才能调用对应的方法。

2. 方法参数冗余,逻辑不合理

calcCubeArea和calcCubeVolume里的参数完全多余——你是用实例变量side计算的,不需要传参。直接返回计算结果即可,参数可以删除。

3. 输入类型不匹配

side被定义为double类型,但你用sc.nextInt()读取整数,输入小数会报错,应该改成sc.nextDouble()。

4. 静态变量units的设计问题

units被定义为static,会导致所有Cube实例共享同一个单位值,多实例时会互相覆盖,改成非静态变量更合理。


修正后的主类代码:

import java.util.Scanner;
public class keelanbaxter_185A01_Cubedemo {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the type of units: ");
        String units = sc.next();
        System.out.print("Enter the side length: ");
        double side = sc.nextDouble(); // 修正为读取double类型

        // 实例化Cube类,而非主类自身
        keelanbaxter_185A01_Cube myCube1 = new keelanbaxter_185A01_Cube();
        myCube1.setSide(side);
        myCube1.setUnits(units); // 将单位设置到Cube对象

        System.out.println("The units you have chosen are: " + units + " and the side length is: " + side + units);

        // 调用方法无需传参,方法内部使用实例的side变量计算
        System.out.println("The area of one face of the cube is: " + myCube1.calcCubeArea() + " " + units + "²");
        System.out.println("The volume of the cube is: " + myCube1.calcCubeVolume() + " " + units + "³");

        sc.close(); // 关闭Scanner
    }
}

修正后的Cube类代码:

public class keelanbaxter_185A01_Cube {
    private double side;
    private String units; // 去掉static,改为实例变量

    public void setSide(double S) {
        side = S;
    }

    public double getSide() {
        return side;
    }

    public void setUnits(String uni) {
        units = uni;
    }

    public String getUnits() {
        return units;
    }

    // 删除冗余参数,直接计算返回
    public double calcCubeVolume() {
        return side * side * side;
    }

    // 删除冗余参数,直接计算返回(注:此处为单一面的面积,若需立方体表面积,需改为6*side*side)
    public double calcCubeArea() {
        return side * side;
    }
}

补充说明:

如果你的需求是计算立方体的表面积(6个面的总面积),需要把calcCubeArea修改为:

public double calcCubeSurfaceArea() {
    return 6 * side * side;
}

同时主类里的调用也要对应修改方法名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:01:25