我正在为一个辅助项目创建薪资系统。我使用嵌套的if语句来查看用户选择的结算时间表(52或26),然后计算总薪资,税金和其他扣除额。 52周的付款时间表工作正常,但26周的付款时间表不显示任何值。
double hoursWorked = Double.parseDouble(txtHoursWorked.getText());
double hourlyRate = Double.parseDouble(txtHourlyPay.getText());
double overtimeHours = Double.parseDouble(txtOvertimeHours.getText());
double overtimeRate = Double.parseDouble(txtOvertimePay.getText());
// Declare variables
double basicPay;
double overtimePay;
double grossPay;
double taxes;
double yearlyCompensation;
double cpp;
double ei;
double deductions;
double netPay;
if (cmbPayPeriod.getSelectedItem().equals("52 Week Pay Period")) {
grossPay = basicPay + overtimePay;
txtGrossPay.setText(x.format(grossPay));
yearlyCompensation = grossPay * 52;
if (yearlyCompensation < 45282) {
taxes = (yearlyCompensation * 0.15) / 52;
cpp = (yearlyCompensation * 0.0495) / 52;
ei = (yearlyCompensation * 0.0163) / 52;
deductions = taxes + cpp + ei;
netPay = grossPay - deductions;
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
txtNetPay.setText(x.format(netPay));
}
else if (yearlyCompensation < 90536) {
taxes = (yearlyCompensation * 0.205) / 52;
cpp = (yearlyCompensation * 0.0495) / 52;
ei = (yearlyCompensation * 0.0163) / 52;
deductions = taxes + cpp + ei;
netPay = grossPay - deductions;
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
txtNetPay.setText(x.format(netPay));
}
else if (yearlyCompensation < 140388) {
taxes = (yearlyCompensation * 0.265) / 52;
cpp = (yearlyCompensation * 0.0495) / 52;
ei = (yearlyCompensation * 0.0163) / 52;
deductions = taxes + cpp + ei;
netPay = grossPay - deductions;
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
txtNetPay.setText(x.format(netPay));
}
else if (yearlyCompensation < 200000) {
taxes = (yearlyCompensation * 0.29) / 52;
cpp = (yearlyCompensation * 0.0495) / 52;
ei = (yearlyCompensation * 0.0163) / 52;
deductions = taxes + cpp + ei;
netPay = grossPay - deductions;
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
txtNetPay.setText(x.format(netPay));
}
else {
taxes = (yearlyCompensation * 0.33) / 52;
cpp = (yearlyCompensation * 0.0495) / 52;
ei = (yearlyCompensation * 0.0163) / 52;
deductions = taxes + cpp + ei;
netPay = grossPay - deductions;
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
txtNetPay.setText(x.format(netPay));
}
if (cmbPayPeriod.getSelectedItem().equals("n")) {
grossPay = (basicPay + overtimePay) * 2;
txtGrossPay.setText(x.format(grossPay));
yearlyCompensation = grossPay * 26;
if (yearlyCompensation < 45282) {
taxes = (yearlyCompensation * 0.15) / 52;
cpp = (yearlyCompensation * 0.0495) / 52;
ei = (yearlyCompensation * 0.0163) / 52;
deductions = taxes + cpp + ei;
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
}
else if (yearlyCompensation < 90536) {
taxes = (yearlyCompensation * 0.205) / 52;
cpp = (yearlyCompensation * 0.0495) / 52;
ei = (yearlyCompensation * 0.0163) / 52;
deductions = taxes + cpp + ei;
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
}
else if (yearlyCompensation < 140388) {
taxes = (yearlyCompensation * 0.265) / 52;
cpp = (yearlyCompensation * 0.0495) / 52;
ei = (yearlyCompensation * 0.0163) / 52;
deductions = taxes + cpp + ei;
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
}
else if (yearlyCompensation < 200000) {
taxes = (yearlyCompensation * 0.29) / 52;
cpp = (yearlyCompensation * 0.0495) / 52;
ei = (yearlyCompensation * 0.0163) / 52;
deductions = taxes + cpp + ei;
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
}
else {
taxes = (yearlyCompensation * 0.33) / 52;
cpp = (yearlyCompensation * 0.0495) / 52;
ei = (yearlyCompensation * 0.0163) / 52;
deductions = taxes + cpp + ei;
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
}
}
}
答案 0 :(得分:0)
您的代码包含许多重复内容,使其难以阅读且难以调试。
基本上它分为六个部分:
解析输入
double hoursWorked = Double.parseDouble(txtHoursWorked.getText());
double hourlyRate = Double.parseDouble(txtHourlyPay.getText());
double overtimeHours = Double.parseDouble(txtOvertimeHours.getText());
double overtimeRate = Double.parseDouble(txtOvertimePay.getText());
付费计算,而不是实际显示在您显示的代码中
double basicPay = hoursWorked * hourlyRate;
double overtimePay = overtimeHours * overtimeRate;
毛薪计算,具体取决于时间表
double grossPay;
double yearlyCompensation;
if (cmbPayPeriod.getSelectedItem().equals("52 Week Pay Period")) {
grossPay = basicPay + overtimePay;
yearlyCompensation = grossPay * 52;
} else if (cmbPayPeriod.getSelectedItem().equals("n")) {
grossPay = (basicPay + overtimePay) * 2;
yearlyCompensation = grossPay * 26;
} else {
//this must be an error
//just bail out:
return;
}
(您当前的代码未显示如果用户既未选择“52周付费期”也未选择“n”将会执行的操作 - 我的代码会将此处理为错误并中止计算。您可能需要执行其他操作。 )
确定税率
double taxRate;
if (yearlyCompensation < 45282) {
taxRate = 0.15;
} else if (yearlyCompensation < 90536) {
taxRate = 0.205;
} else if (yearlyCompensation < 140388) {
taxRate = 0.265;
} else if (yearlyCompensation < 200000) {
taxRate = 0.29;
} else {
taxRate = 0.33;
}
计算税金和净工资
double taxes = (yearlyCompensation * taxRate) / 52;
double cpp = (yearlyCompensation * 0.0495) / 52;
double ei = (yearlyCompensation * 0.0163) / 52;
double deductions = taxes + cpp + ei;
double netPay = grossPay - deductions;
显示结果
txtGrossPay.setText(x.format(grossPay));
txtTaxP.setText(x.format(taxes));
txtCPP.setText(x.format(cpp));
txtEI.setText(x.format(ei));
txtDeductions.setText(x.format(deductions));
txtNetPay.setText(x.format(netPay));
由于零件现在要小得多,因此更容易找到错误嵌套条件等问题。