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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:06:00