构造函数是未定义的问题

时间:2013-11-20 03:40:59

标签: java constructor undefined

我正在编写一个应该通过文本文件读取的程序,创建一组不同类型的员工(每个都有自己的子类),然后以不同的格式打印出信息。我想我已经完成了大部分工作,但每当我尝试实际创建对象时(至少我认为它是什么?),我得到一个“构造函数是未定义的”错误。所有这7个对象都发生了这种情况。我将在这里发布一个(以及它的子类),这样你们就不会超载信息,希望我可以从中找出其余部分。

感谢您提供的任何帮助!

我正在阅读和创建对象的驱动程序类(不包括此后的其余代码) “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 个答案:

答案 0 :(得分: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);

你传递了5个参数。工资怎么了?

附注:

  • Java变量通常是基于camel的 - 所以dayOfBirthid而不是DayOfBirthID
  • double用于薪水等财务价值是一个坏主意。使用BigDecimal或保留整数分数。 (假设你甚至需要它到分钱......)