Java程序DecagonalPrismApp无法打印输出及错误提示问题求助
DecagonalPrismApp 程序问题排查及修复方案
核心问题梳理
- 问题1:
main方法仅完成用户输入读取,未实例化DecagonalPrismApp对象,也未调用输出逻辑,导致合法输入无任何结果输出 - 问题2:现有
start方法逻辑完全错误,do-while循环条件写反,只要输入非负数值就会进入死循环持续打印错误提示 - 问题3:输出用的
toString方法依赖的surfaceArea()、baseArea()、lateralSurfaceArea()、volume()四个计算方法完全缺失,且未导入java.text.DecimalFormat包,直接使用会编译报错 - 问题4:
setEdge、setHeight的非负判断建议调整为>=0,语义更清晰,避免边界值歧义
修复步骤
1. 补充导包
在代码头部新增DecimalFormat的导入:
import java.text.DecimalFormat; import java.util.Scanner;
2. 补充缺失的计算方法
在类的方法区添加四个几何计算方法:
// 计算底面积 public double baseArea() { return 2.5 * edge * edge * (1/Math.tan(Math.PI/10)); } // 计算侧面积 public double lateralSurfaceArea() { return 10 * edge * height; } // 计算表面积 public double surfaceArea() { return 2 * baseArea() + lateralSurfaceArea(); } // 计算体积 public double volume() { return baseArea() * height; }
3. 删除错误的start方法,将校验逻辑整合到main中
public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("输入正十棱柱的标签、棱长、高度:"); System.out.print("\t标签:"); String label = scan.nextLine(); System.out.print("\t棱长:"); double edge = scan.nextDouble(); // 校验棱长非负 if (edge < 0) { System.out.println("错误:棱长不能为负数"); scan.close(); return; } System.out.print("\t高度:"); double height = scan.nextDouble(); // 校验高度非负 if (height < 0) { System.out.println("错误:高度不能为负数"); scan.close(); return; } // 实例化对象并输出结果 DecagonalPrismApp prism = new DecagonalPrismApp(label, edge, height); System.out.println(prism.toString()); scan.close(); }
4. 补全toString方法的闭合大括号,修正格式
现有toString缺少结束的大括号,补全即可:
public String toString() { DecimalFormat fmt = new DecimalFormat("#,##0.0##"); return "正十棱柱 \"" + label + "\" 棱长 = " + edge + " 单位\n\t" + "高度 = " + height + " 单位\n\t参数如下:" + "表面积 = " + fmt.format(surfaceArea()) + " 平方单位\n\t" + "底面积 = " + fmt.format(baseArea()) + " 平方单位 \n\t" + "侧面积 = " + fmt.format(lateralSurfaceArea()) + " 平方单位\n\t" + "体积 = " + fmt.format(volume()) + " 立方单位 \n\t"; }
效果验证
- 输入负数棱长/高度时,会立即打印对应错误提示并退出程序
- 输入合法数值时,会实例化对象自动调用
toString方法输出所有几何参数
内容的提问来源于stack exchange,提问作者Solaire of Astora
相关产品推荐
相关产品推荐

