创建Employees的ArrayList

时间:2015-03-02 16:37:34

标签: java arrays inheritance arraylist

我有三个班级

  • 雇员
  • 生产工人
  • 轮班主管班

我的想法是让生产和轮班主管扩展员工类,然后创建另一个班级EmployeeList,以填写有关生产工人和轮班主管的信息。

如何从员工类中获取名称和信息以迭代到arraylist?

如何添加超过一半的员工随机列表。工人和其他轮班主管?

员工:

public class Employee {

public String EmployeeName;
public String EmployeeNumber;
public int hireyear;
public double WeeklyEarning;

public Employee()
{
    EmployeeName = null;
    EmployeeNumber = null;
    hireyear = 0;
    WeeklyEarning = 0;

}

public static final String[] Enum = new String[] {
        "0001-A", "0002-B","0003-C","0004-D","0002-A",
        "0003-B","0004-C","0005-D","0011-A", "0012-B",
        "0013-C","0014-D","0121-A", "0122-B","0123-C" };

public static final String[] Ename = new String[] {
        "Josh", "Alex", "Paul", "Jimmy", "Josh", "Gordan", "Neil", "Bob",
        "Shiv", "James", "Jay", "Chris", "Michael", "Andrew", "Stuart"};

public String getEmployeeName()
{
    return this.EmployeeName;
}

public String getEmployeeNumber()
{
    return this.EmployeeNumber;
}

public int gethireyear()
{
    return this.hireyear;
}

public double getWeeklyEarning()
{
    return this.WeeklyEarning;
}

public String setEmployeeName(String EName)
{
    return this.EmployeeName = EName;
}

public String setEmployeeNumber(String ENumber)
{
    return this.EmployeeNumber = ENumber;
}

public int setEmployeehireyear(int Ehireyear)
{
    return this.hireyear = Ehireyear;
}

public double setEmployeeweeklyearning(double Eweeklyearning)
{
    return this.WeeklyEarning = Eweeklyearning;
}

}

ProductionWorker:

import java.util.Random;
public class ProductionWorker extends Employee {
public double HourlyRate;
public ProductionWorker()
{
    super();
    HourlyRate = 0;
}

public static void main(String[] args) {
    ProductionWorker pw = new ProductionWorker();
    Random rnd = new Random();
    int count =0;
    // adding random Employees.....
    while(count<5)
    {
        int num= rnd.nextInt(Enum.length);
        int decimal = rnd.nextInt(10);
        double dec = decimal/10;

        pw.setEmployeeName(Ename[num]);
        pw.setEmployeeNumber(Enum[num]);
        pw.setEmployeehireyear(rnd.nextInt(35) + 1980);
        pw.setEmployeeweeklyearning(rnd.nextInt(5000) + 5000);
        pw.setHourlyRate(rnd.nextInt(44) + 6 + dec);

        System.out.println("EmployeeName: " + pw.getEmployeeName() + "\nEmployeeNumber: " + pw.getEmployeeNumber() +
            "\nHireYear: " + pw.gethireyear() + "\nWeeklyEarning: " +     pw.getWeeklyEarning() +
            "\nHourlyRate: " + pw.getHourlyRate() +"\n");
        count++;
    }

}

public double getHourlyRate()
{
    return this.HourlyRate;
}

public void setHourlyRate(double hourlyrate)
{
    this.HourlyRate = hourlyrate;
}

}

ShiftSupervisor:

import java.util.Random;
public class ShiftSupervisor extends Employee{
public double YearlySalary;
public int GoalsCleared;

public ShiftSupervisor()
{
    super();
    YearlySalary = 0;
}

public static void main(String[] args) {

    ShiftSupervisor S = new ShiftSupervisor();
    Random rnd = new Random();
    int count =0;
    // adding random Employees.....
    System.out.println("Adding Employees..");
    while(count<5)
    {
        int num= rnd.nextInt(Enum.length);          

        S.setEmployeeName(Ename[num]);
        S.setEmployeeNumber(Enum[num]);
        S.setEmployeehireyear(rnd.nextInt(35) + 1980);
        S.setEmployeeweeklyearning(rnd.nextInt(100) * 100);
        S.setYearlySalary(rnd.nextInt(40000) + 40000);

        System.out.println("EmployeeName:" + S.getEmployeeName() + "\nEmployeeNumber: " + S.getEmployeeNumber() +
            "\nHireYear: " + S.gethireyear() + "\nWeeklyEarning: " + S.getWeeklyEarning() +
            "\nearlySalary: " + S.getYearlySalary() +"\n");
        count++;
    }

}
// returns yearly salary
public double getYearlySalary()
{
    return this.YearlySalary;
}

// returns goals cleared
public int getGoalsCleared()
{
    return this.GoalsCleared;
}

// set yearly salary
public void setYearlySalary(double yearlysalary)
{
    this.YearlySalary = yearlysalary;
}

}

2 个答案:

答案 0 :(得分:1)

我要做的第一件事就是在构造函数中设置所有必需的字段。如果Employee没有“存在”,直到它有一个名称,那么它应该是构造函数的一部分。

然后,我建议您考虑重命名一些字段。当我第一次看到Enum作为String[]并突出显示为类型时,我花了一点时间才弄清楚到底发生了什么。将其重命名为employeeNumbers可以解决此问题。

接下来,我认为您应该有一个EmployeeGenerator课程,其唯一目的是生成Employee

public class EmployeeGenerator {

    public ProductionWorker generateProductionWorker() {
        Random rng = new Random();
        int numberOfEmployeeNames = employeeNames.length;
        String employeeName = employeeNames[rng.nextInt(numberOfEmployeeNames)];
        int numberOfEmployeeNumbers = employeeNumbers.length;
        String employeeNumber = employeeNumbers[rng.nextInt(numberOfEmployeeNumbers)];
        ProductionWorker worker = new ProductionWorker(employeeName, employeeNumber);

        int yearHired = rng.nextInt(100) + 1900;
        worker.setHireYear(yearHired);

        int hourlyRate = rng.nextInt(20) + 10;
        worker.setHourlyRate(hourlyRate);

        // any other fields...
        return worker;
    }

    // method to generate shift supervisor
}

然后你可以简单地做

public static void main(String[] args) {
    Random rng = new Random();
    int numberOfEmployeesToGenerate = 1000;
    int minimumNumberOfProductionWorkers = numberOfEmployeesToGenerate / 2;

    int numberOfProductionWorkersToGenerate = 
        minimumNumberOfProductionWorkers + rng.nextInt(100);

    int numberOfSupervisorsToGenerator =
        numberOfEmployeesToGenerate - numberOfProductionWorkersToGenerate;

    List<Employee> employees = new ArrayList<>();
    EmployeeGenerator generator = new EmployeeGenerator();
    for (int i = 0; i < numberOfProductionWorkersToGenerate; i++) {
        ProductionWorker worker = generator.generateProductionWorker();
        employees.add(worker);
    }

    for (int i = 0; i < numberOfSupervisorsToGenerate; i++) {
        Supervisor supervisor = generator.generateSupervisor();
        employees.add(supervisor);
    }
}

这应该有助于你指出正确的方向。这不是完美的代码,还有其他方法可以重构它,使其更具可维护性和高性能。

答案 1 :(得分:0)

当您说要添加随机员工列表时,您的意思是什么?

目前,您只实例化一个ProductionWorker和一个ShiftSupervisor,更改成员变量的值,并将一些文本打印到StdOut

您是要将实例存储在列表中还是控制台输出足够?

此外,您有两个main - 方法。将执行哪一个?将一个Main类作为应用程序的入口点并从那里创建实例可能会更好。

一般来说,你可以这样做:

public class Main {
    public static void main(String[] args) {
        List<Employee> emps = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            //create new employee
            emps.add(newEmployee);
        }
        //do something with list
    }
}