嵌套If语句无法正确显示

时间:2017-06-15 16:48:47

标签: java

我正在为一个辅助项目创建薪资系统。我使用嵌套的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)); 


        }
    }
    }

1 个答案:

答案 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));
    

由于零件现在要小得多,因此更容易找到错误嵌套条件等问题。