2013-11-20 3 views
0

В настоящее время я пишу программу, которая должна читать текстовый файл, создавать массив разных типов сотрудников (каждый из них имеет свой собственный подкласс), а затем распечатывать информацию в другом формате. Я думаю, что у меня большая часть работы, но всякий раз, когда я пытаюсь создать объекты (по крайней мере, я думаю, что это именно так), я получаю ошибку «Constructor is undefined». Это происходит на всех 7 этих объектах. Я просто отправлю его сюда (вместе с его подклассом), чтобы вы, ребята, не перегружали информацией, и, надеюсь, я смогу выяснить остальное.Constructor is Undefined issues

Спасибо за любую помощь, которую вы можете предоставить!

Driver класс, где я читаю и создания объектов (не включать остальную часть кода ниже этого) ошибка происходит в «Emp [0]» линии

import java.io.File; 
import java.util.Scanner; 
public class PayrollSystemTest2 { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) throws Exception { 
     // TODO Auto-generated method stub 
     Scanner input; 
     input = new Scanner(new File("EmployeePayrollInfo.txt")); 
     Employee[] Emp = new Employee[20]; 

     while(input.hasNext()) 
     { 
      String ID = input.nextLine(); 

      if (ID.charAt(0) == 'S') 
      { 
       String first = input.nextLine(); 
       String last = input.nextLine(); 
       String ssn = input.nextLine(); 
       Date DayOfBirth = new Date(input.nextInt(),input.nextInt(),input.nextInt()); 
       double salary = input.nextDouble(); 
       Emp[0] = new SalariedEmployee(first, last, ssn, DayOfBirth, ID); 
      } 

SalariedEmployee подкласс

public class SalariedEmployee extends Employee 
{ 
    private double weeklySalary; 

    // four-argument constructor 
    public SalariedEmployee(String first, String last, String ssn, Date DayOfBirth, String ID, 
     double salary) 
    { 
     super(first, last, ssn, DayOfBirth, ID); // pass to Employee constructor 

     setWeeklySalary(salary); // validate and store salary 
    } // end four-argument SalariedEmployee constructor 

    // set salary 
    public void setWeeklySalary(double salary) 
    { 
     double baseSalary; 
    if (salary >= 0.0) 
     baseSalary = salary; 
     else 
     throw new IllegalArgumentException(
      "Weekly salary must be >= 0.0"); 
    } // end method setWeeklySalary 

    // return salary 
    public double getWeeklySalary() 
    { 
     return weeklySalary; 
    } // end method getWeeklySalary 

    // calculate earnings; override abstract method earnings in Employee 
    @Override               
    public double earnings()            
    {                 
     return getWeeklySalary();           
    } // end method earnings            

    // return String representation of SalariedEmployee object 
    @Override              
    public String toString()          
    {                
     return String.format("salaried employee: %s\n%s: $%,.2f", 
     super.toString(), "weekly salary", getWeeklySalary()); 
    } // end method toString          
} // end class SalariedEmployee 

Снова, спасибо за любую помощь, которую вы можете предоставить.

ответ

1

Ну да - посмотреть на конструкторе, в том числе четко неточный комментария:

// four-argument constructor 
public SalariedEmployee(String first, String last, String ssn, Date DayOfBirth, 
         String ID, double salary) 

Обратите внимание, как есть 6 параметров. Теперь вот как вы пытаетесь это назвать:

Emp[0] = new SalariedEmployee(first, last, ssn, DayOfBirth, ID); 

Вы передаете пять аргументов. Что случилось с зарплатой?

Как сторона отмечает:

  • Java переменные обычно camelCased - так dayOfBirth и id, а не DayOfBirth и ID
  • Использование double для финансовых ценностей, таких как зарплата является плохой идеей. Используйте BigDecimal или сохраните целое число центов. (Предполагается, что вам даже понадобится его до центра ...)
+0

Извините, что неточный комментарий был изначально четыре, и я изменил его на шесть без изменения комментария. Я не могу поверить, что не уловил недостающий аргумент. Извините за то, что потратил время, но большое спасибо за помощь! – user2774647

+1

@ user2774647: Я бы полностью удалил комментарий - это не дает никакого дополнительного понимания, и подобные комментарии могут так легко устаревать. –

+0

Я планирую сделать это, исходный код на самом деле пришел из книги, которую я сделал несколько недель назад, и мне нужны все комментарии в рамках моего задания. Теперь я просто играю со старым кодом, пытаясь выполнить с ним новые вещи, и просто не испортил старые комментарии. – user2774647