2013-10-15 2 views
0

Кусок кода, который я должен написать, представляет собой программу расчета заработной платы, которая собирает входы пользователей, а затем выводит информацию о платежной ведомости. Я написал программу, но я не могу понять, почему я получаю сообщение об ошибке «локальные переменные не могут быть инициализированы.Непонятно, как инициализировать эти переменные

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."); 
} 

} 
+0

@flup в Java, это ошибка компиляции, чтобы не инициализировать объекты. В этом случае все строки (name, rateStr, hoursStr и т. Д.) Должны быть инициализированы до «null» для устранения ошибки. – foolmoron

ответ

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

Как это вы можете инициализировать их.

вы должны сделать это, потому что, все эти переменные используются и, вероятно, присваивается некоторое значение в условных операторах (в данном случае 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); 
} 

Вот почему, когда вы тр y, чтобы использовать их в JOptionPane.showMessageDialog, вы получаете ошибку, что эти переменные, возможно, не были инициализированы.

2

В этом случае заявление можно пропустить присваивание значения к overtimeHours, overtimePay и regularPay переменных, если hoursWorked не больше 40. В самом конце кода вы затем попробовать showMessageDialog, чтобы отобразить эти переменные.

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

    regularPay = (40*rateOfPay); 

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

Вы видите, почему это дало вам это предупреждение? На определенном пути кода вы пытаетесь распечатать значения переменных, которые еще не были инициализированы.

Смежные вопросы