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

BlueJ中薪资单生成器遇"%.2f"崩溃及非输入对话框需求咨询

解决你的员工净薪资计算程序问题

我帮你找到了两个问题的根源,现在给你对应的解决方案:

1. 为什么使用%.2f格式化时程序崩溃?

你的String.format调用犯了一个常见的参数匹配错误:

  • 你的格式字符串里有5个%.2f占位符(分别对应Gross Pay、PRSI、USC、Pension Plan、Net Earnings),但你错误地把employeeGrossPay直接拼在了格式字符串末尾,而不是作为参数传给String.format。这导致格式字符串的占位符数量和实际传入的参数数量不匹配,触发了IllegalFormatException,程序因此崩溃。

2. 如何用非输入对话框展示薪资单汇总?

你当前用的JOptionPane.showInputDialog是用于接收用户输入的对话框,换成JOptionPane.showMessageDialog就能实现纯展示的消息对话框,不需要用户输入任何内容。


修复后的完整代码

import javax.swing.JOptionPane; 

public class Payslipgenerator {
    public static void main(String[] args) {
        String employeeName, grossPay, payslipFinal; 
        // 声明应用常量(遵循Java大写命名惯例)
        final double PRSI = 0.025, PAYE = 0.2, USC = 0.04, Pension = 0.05, HEALTH_INSURANCE = 75; 
        // 存储计算结果的双精度变量
        double prsiCalc, payeCalc, uscCalc, pensionCalc, netValue; 

        employeeName = JOptionPane.showInputDialog(null, "Enter Employee name : ", "User Info");
        grossPay = JOptionPane.showInputDialog(null, "Enter Gross Pay (€) : ", "User Info");
        double employeeGrossPay = Double.parseDouble(grossPay);

        prsiCalc = employeeGrossPay * PRSI;
        payeCalc = employeeGrossPay * PAYE;
        uscCalc = employeeGrossPay * USC;
        pensionCalc = employeeGrossPay * Pension;
        netValue = employeeGrossPay - (prsiCalc + payeCalc + uscCalc + pensionCalc + HEALTH_INSURANCE);

        // 修复String.format的参数匹配:按占位符顺序传入对应变量
        payslipFinal = String.format(
            "Gross Pay : €%.2f \nPRSI : €%.2f \nPAYE : €%.2f \nUSC : €%.2f \nPension Plan : €%.2f \nHealth Insurance : €%.2f \nNet Earnings: €%.2f",
            employeeGrossPay, prsiCalc, payeCalc, uscCalc, pensionCalc, HEALTH_INSURANCE, netValue
        );

        // 替换为纯展示的消息对话框,无需用户输入
        JOptionPane.showMessageDialog(null, "Employee Name : " + employeeName + "\n\n" + payslipFinal, "Payslip Breakdown", JOptionPane.INFORMATION_MESSAGE);
    }
}

额外优化说明(可选)

  • 把常量改成大写命名(Java惯例),比如HEALTH_INSURANCE,提升代码可读性。
  • 补全了PAYE的展示(原代码计算了但未显示),让薪资单信息更完整。
  • 给showMessageDialog添加了信息图标参数,让对话框展示更直观。

内容的提问来源于stack exchange,提问作者E.MAC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:11:59