我正在编写一个应该通过文本文件读取的程序,创建一组不同类型的员工(每个都有自己的子类),然后以不同的格式打印出信息。我想我已经完成了大部分工作,但每当我尝试实际创建对象时(至少我认为它是什么?),我得到一个“构造函数是未定义的”错误。所有这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
再次感谢您提供的任何帮助。
答案 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个参数。工资怎么了?
附注:
dayOfBirth
和id
而不是DayOfBirth
和ID
double
用于薪水等财务价值是一个坏主意。使用BigDecimal
或保留整数分数。 (假设你甚至需要它到分钱......)