重命名文件后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
相关产品推荐
相关产品推荐

