Я получаю сообщение об ошибке в своем Java-коде, но не вижу, что с ним не так. Помогите? - PullRequest
1 голос
/ 25 марта 2010

Ошибка, которую я получаю, заключается в методе fillPayroll () в цикле while, в котором говорится payroll.add (employee). Ошибка говорит, что я не могу вызвать add () для типа массива Person, но класс Employee наследуется от Person, поэтому я подумал, что это возможно. Кто-нибудь может уточнить это для меня?

import java.io.*;
import java.util.*;

public class Payroll
{   
    private int monthlyPay, tax;
    private Person [] payroll = new Person [1];

        //Method adds person to payroll array
    public void add(Person person)
    {
        if(payroll[0] == null) //If array is empty, fill first element with person
        {
            payroll[payroll.length-1] = person;
        }
        else //Creates copy of payroll with new person added
        {
            Person [] newPayroll = new Person [payroll.length+1];
            for(int i = 0;i<payroll.length;i++)
            {
                newPayroll[i] = payroll[i];
            }
            newPayroll[newPayroll.length] = person;
            payroll = newPayroll;
        }
    }


    public void fillPayroll()
    {
        try
        {
            FileReader fromEmployee = new FileReader ("EmployeeData.txt");
            Scanner data = new Scanner(fromEmployee);
                        Employee employee = new Employee();

            while (data.hasNextLine())
            {
                employee.readData(data.nextLine());
                payroll.add(employee);
            }

        }
        catch (FileNotFoundException e)
        {
            System.out.println("Error: File Not Found");
        }

    }

}

Ответы [ 5 ]

7 голосов
/ 25 марта 2010

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

Размеры массивов нельзя изменить после их создания. Весь шаблон для управления этим осуществляется ArrayList. Использование массивов с подклассами в элементах также имеет другие проблемы (вокруг ковариации). Вероятно, единственная строка, которую вам нужно изменить:

private final List<Person> payroll = new ArrayList<Person>();

List s имеют метод add(). Массивы не.

4 голосов
/ 25 марта 2010

Если по какой-либо причине вы не можете использовать коллекции. Вы хотите включить:

payroll.add(employee);

в:

this.add(employee);
3 голосов
/ 25 марта 2010

зарплата это массив.Вы вызываете метод для массива.Это невозможно.

0 голосов
/ 25 марта 2010

Если класс B расширяет A:

A a = новый B ();

но не:

B b = новый A ();

0 голосов
/ 25 марта 2010

Поскольку платежная ведомость является массивом, она должна быть

payroll[index].add(employee);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...