1

我刚刚开始使用 Java,我遇到了一个我似乎无法找到根源的特殊问题。我有 2 个程序,一个从文本文件中获取数据,然后将其调用到一个类中进行一些计算,最后将输出放入另一个文本文档中。

除了这里的这一部分,一切都有效:

public class Paycheck
{
//Constants for the private class
private final String EMPLOYEE_NAME;           //Employee name          
private final String SOC_SEC_NUM;             //Employee Social Security Number
private final double WAGE_RATE;               //Employee wage
private final double TAX_RATE;                //Employee tax withheld 
private final double HOURS_WORKED;            //Employee's hours of work

//Variables for the private class
private double grossPay;                      //Employee Gross Pay
private double taxWithheld;                   //Employee Tax Withheld
private double netPay;                        //Employee Net Pay





//This is the constructor. It is called whenever an instance of the class is created
public Paycheck (String name, String ssn, double wage, double tax, double hours)
{
    EMPLOYEE_NAME = name;  //Instance employee name
    SOC_SEC_NUM = ssn;    //Instance employee SSN
    WAGE_RATE = wage;      //Instance employee wage rate
    TAX_RATE = tax;        //Instance employee tax rate
    HOURS_WORKED = hours;  //Instance employee hours worked
}

//This calculates the variables in the paycheck class
public void calcWages()
{
    grossPay = WAGE_RATE * HOURS_WORKED;    //Calculates Gross Pay
    taxWithheld = grossPay * TAX_RATE;      //Calculates Taxes Withheld
    netPay = grossPay - taxWithheld;        //Calculates net pay

}




//Returns the Paycheck objects Employee Name
public String getEmployeeName()
{
    return EMPLOYEE_NAME;
}

//Returns the employee SSN of the Paycheck object
public String getSocSecNum()
{
    return SOC_SEC_NUM;
}

//Reeturns a Paycheck object's employee Wage Rate
public double getWageRate()
{
    return WAGE_RATE;
}

//Returns a Paycheck object's employee tax rate
public double getTaxRate()
{
    return TAX_RATE;
}

//Returns an Paycheck object's employee hours worked
public double getHoursWorked()
{
    return HOURS_WORKED;
}

//Returns a Paycheck object's gross pay
public double getGrossPay()
{
    return grossPay;
}

//Returns a Paycheck object's Taxes Withheld
public double getTaxWithheld()
{
    return taxWithheld;
}

//Returns a paycheck object't net pay 
public double getNetPay()
{
    return netPay;
}

calcWages() 进行必要的计算,下面是一系列调用它们的 get 语句。但是,我的输出没有返回 calcWages() 参数的任何值。

我在这里添加了吸气剂,我的另一个程序正在抓取它们。但是,我的其他程序的最终输出为 0。

我在哪里错了?

这是调用它们的主要方法的一部分

  public static void main(String [] args) throws IOException //Throws clause
{
    //Declare constants
    final String INPUT_FILE = "Employee.txt";         //Input text file containing Employee information
    final String OUTPUT_FILE= "PayrollHistory.txt";   //Output text file that will receive the data

    //Declare Variables
    String payPeriodDate;       //Ending date of the pay period
    String employeeName;        //Employee Name in text file
    String employeeSocSecNum;   //Employee SSN in text file
    double employeeHours;       //Employee hours worked
    double employeeTax;         //Employee Tax rate 
    double employeeWage;        //Employee Wage rate
    double totalGrossPay;       //Total employee Gross for pay period
    double totalTaxWithheld;    //Total Tax Withheld for pay period
    double totalNetPay;         //Total Net Payroll for pay period
    String input;               //String input for double conversion in JoptionPane

    DecimalFormat money = new DecimalFormat ("#0.00"); // Decimal Format to put money in the right format(USD)

    //This ensures that the input file actually exists in the program folder 
    //And exits the program if it does not, along with the prompt.
    File file = new File(INPUT_FILE);
  if (!file.exists())
  {
     JOptionPane.showMessageDialog(null, "The " + INPUT_FILE + " file cannot be found." +
                        "Program terminated.");
     System.exit(0);
  }


    // Create Scanner object to enable reading data from input file
  Scanner inputFile = new Scanner(file);

  // Create FileWriter and PrintWriter objects to enable
  // writing (appending not overwriting) data to text file
  FileWriter fwriter = new FileWriter(OUTPUT_FILE, true);
  PrintWriter outputFile = new PrintWriter(fwriter);

    //Initialize accumulator values
  totalGrossPay = 0.0;
    totalTaxWithheld = 0.0;
    totalNetPay = 0.0;

    //Get the pay period for the employee
    payPeriodDate = JOptionPane.showInputDialog("Enter pay period ending date (mm/dd/yyyy):");
    outputFile.println("PAY PERIOD ENDING DATE: " + payPeriodDate);          //Inputs pay period date into the text file
    outputFile.println(); // Blank line
    outputFile.println(); // Blank line


    while (inputFile.hasNext()) // This will look through the input file and get the necessary variable input
  {
     // Read employee Name from Input File
     employeeName = inputFile.nextLine();
     // Read employee SSN from input file
     employeeSocSecNum = inputFile.nextLine();
     // Read employee Wage Rate from input file
        //Parses it into a double type
     input = inputFile.nextLine();
     employeeWage = Double.parseDouble(input);
        //Read employee tax rate from input file
        //Parses it into a double type
        input = inputFile.nextLine();
        employeeTax = Double.parseDouble(input);


        //Get number of hours worked
        input = JOptionPane.showInputDialog("Employee Name: " + employeeName +
                                                        "\nEnter number of hours worked:");
        employeeHours = Double.parseDouble(input);

        //This call the paycheck class to create a new Paycheck Object
        Paycheck employee = new Paycheck (employeeName, employeeSocSecNum, employeeWage, employeeTax, employeeHours);

        // Call Paycheck class methods into the output file
     outputFile.println("Employee Name: " + employeeName);                              //Employee Name
     outputFile.println("SSN: " + employeeSocSecNum);                                   //Employee SSN
     outputFile.println("Hours Worked: " + employeeHours);                              //Employee Hours Worked
     outputFile.println("Wage Rate: " +  money.format(employeeWage));                   //Employee Wage Rate
        outputFile.println("Gross Pay: " +  money.format(employee.getGrossPay()));         //Employee Gross Pay
        outputFile.println("Tax Rate: " +  money.format(employeeTax));                     //Employee Tax Rate
        outputFile.println("Tax Withheld: " +  money.format(employee.getTaxWithheld()));   //Employee Tax Withheld
        outputFile.println("Net Pay: " + employee.getNetPay());                            //Employee Net Pay
     outputFile.println(); // Blank line
4

3 回答 3

3

在调用你的 getter 之前,你 似乎并没有真正调用 ,所以仍然是 0,因为这是 Java 未初始化数字的默认值。calcWages()grossPay, taxWithheld, and netPay

您需要employee.calcWages()在引用这些值之前调用它们以进行更改。

于 2013-02-22T18:46:53.763 回答
0

这是因为calcWages()被声明为void ( public void calcWages()),这意味着它不应该返回任何值,而只是完成一系列步骤(在此示例中计算工资单细节)。调用它后,继续引用它处理的实例变量。

于 2013-02-22T18:26:02.257 回答
0

您已将变量声明为final,这意味着它们只能分配一次。

于 2013-02-22T18:52:08.243 回答