Shadough
Shadough

Reputation: 31

Not exactly sure how to initialize these variables

The piece of code I am supposed to write is a Payroll program that gathers users inputs and then will output payroll information. I have wrote the program, but I cannot seem to figure out why I am getting the error "the local variables may not have been initialized.

import javax.swing.JOptionPane;



public class Payroll 
{
public static void main(String []args)
{

    String name, rateStr, hoursStr, maritalStatus, deductionStr, numEmpStr;
    double numEmp, rateOfPay, hoursWorked, regularPay, overtimeHours,     overtimePay, insuranceRate, taxRate, grossPay, taxes, deduction, netPay;  


    final double taxRate1 = .0857;
    final double taxRate2 = .0756;
    final double taxRate3 = .0579;


    numEmpStr = JOptionPane.showInputDialog("How many employees do you have? ");
    numEmp = Double.parseDouble(numEmpStr);

    while(numEmp >0 )
    {

        //Input All User Info!
        name = JOptionPane.showInputDialog("Employee Name: ");

        rateStr = JOptionPane.showInputDialog("Rate of Pay: ");
        rateOfPay = Double.parseDouble(rateStr);

        hoursStr = JOptionPane.showInputDialog("Hours Worked: ");
        hoursWorked = Double.parseDouble(hoursStr);

        deductionStr = JOptionPane.showInputDialog("Number of Deductions (Enter 1 or 2): ");
        deduction = Double.parseDouble(deductionStr);

        maritalStatus = JOptionPane.showInputDialog("Marital Status (M - Married, S - Single): ");

        //if statement (if hoursWorked >40


        if(hoursWorked> 40)
        {
        overtimeHours = (hoursWorked - 40);
        overtimePay = (rateOfPay*1.5*overtimeHours);

        regularPay = (40*rateOfPay);

        grossPay = (regularPay + overtimePay);
        }
        else
        {
            grossPay = (rateOfPay*hoursWorked);
        }



        if(maritalStatus == "M" )
        {
            insuranceRate =  50;
        }
        else
        {
            insuranceRate = 75;
        }



        if(deduction>2)
        {
            taxRate = .0579;
        }
        else if(deduction==2)
        {
            taxRate = .0759;
        }
        else if(deduction==1)
        {
            taxRate = .0857;
        }
        else
        {

        }


        taxes = (grossPay*taxRate);
        netPay = (grossPay - (taxes + insuranceRate));


        JOptionPane.showMessageDialog(null, "Name: " + name +
                                            "\nRate of Pay: " + rateOfPay +
                                            "\nHours Worked: " + hoursWorked +
                                            "\nRegular Pay: " + regularPay +
                                            "\nOvertime Pay: " + overtimePay +
                                            "\nGross Pay: " + grossPay +
                                            "\nTax Rate: " + taxRate +
                                            "\nTaxes: " + taxes +
                                            "\nInsurance Status: " + maritalStatus + 
                                            "\nDeductions: " + insuranceRate +
                                            "\nNet Pay: " + netPay);


        --numEmp;
    }

    JOptionPane.showMessageDialog(null, "Your are finished with payroll for this period.");
}

}

Upvotes: 0

Views: 393

Answers (2)

Michael
Michael

Reputation: 3332

In this if statement it is possible to skip assigning a value to the overtimeHours, overtimePay, and regularPay variables if hoursWorked is not greater than 40. At the very end of your code you then try a showMessageDialog to display these variables.

    if(hoursWorked> 40)
    {
    overtimeHours = (hoursWorked - 40);
    overtimePay = (rateOfPay*1.5*overtimeHours);

    regularPay = (40*rateOfPay);

    grossPay = (regularPay + overtimePay);
    }
    else
    {
        grossPay = (rateOfPay*hoursWorked);
    }

Do you see now why it gave you this warning? On a certain code path you are trying to print out the values of variables that have not yet been initialized.

Upvotes: 2

Rahul
Rahul

Reputation: 45060

double numEmp, rateOfPay, hoursWorked, regularPay, overtimeHours,     overtimePay, insuranceRate, taxRate, grossPay, taxes, deduction, netPay;
overtimePay = 0.0;
taxRate = 0.0;
regularPay = 0.0;

Like this you can initialize them.

You need to do this because, all these variables are used and probably assigned some value in the conditional statements(in this case if).

if (hoursWorked > 40) {
    overtimeHours = (hoursWorked - 40);
    overtimePay = (rateOfPay * 1.5 * overtimeHours); // Conditional assignment, as its not assigned by default nor in the else

    regularPay = (40 * rateOfPay); // Conditional assignment, as its not assigned by default nor in the else

    grossPay = (regularPay + overtimePay); // This won't be a problem as its assigned some value in else part too.
}else {
    grossPay = (rateOfPay*hoursWorked);
}

That is why, when you try to use them in JOptionPane.showMessageDialog, you get the error that these variables may not have been initialized.

Upvotes: 1

Related Questions