我有三节课

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

我的想法是让生产和轮班主管扩展员工类,然后创建另一个类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;
}

}

值班主任:

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;
}

}

#1楼 票数: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);
    }
}

希望这可以为您指明正确的方向。 这不是完美的代码,还有其他方法可以对其进行重构以使其更易于维护和提高性能。

#2楼 票数: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
    }
}

  ask by davedno translate from so

未解决问题?本站智能推荐:

2回复

使用用户创建的对象/控制台输入初始化ArrayList

对于此程序,我有一个由(int m,int d,int y)定义的Date对象,例如(1,1,2000),以及一个名为LongDate的Date的子类,它由(String monthName,int d, int y),例如(2000年1月1日)。 为了简单起见,我省略了这两个类,仅显示了m
4回复

使用包含数据的新Array或ArrayList调用超类的构造函数?

我试图调用一个超类的构造函数,使用ArrayList(首选)或已经包含信息的数组。 我不知道我的语法错误是什么,或者你甚至可以做到这一点? 我特别想在任一对象中插入“true”和“false”。 就是那两个。 我有一种感觉,这是一个facepalm-er,但我无法弄明白。 我
1回复

在ArrayList Java中创建数组

我正在尝试在一个ArrayList中创建两种不同类型的Array。 相应地设置构造函数(我认为),但是在实例化它们时,我收到一条错误消息“ arr无法解决”。 我正在慢慢地但一定会转弯。 我如何让ArrayList接受带有double的简单数组? (它还必须接受其他类型,所以这不仅仅是更
2回复

如何在 ArrayList 中搜索员工姓名(仅搜索姓氏)

如果给你一个数据文件,其中包含雇员的名字和姓氏,以及他们的工资,如何创建该数据的数组列表? 此外,如何创建一个方法来搜索 ArrayList 中的员工姓名(用户输入的 LAST 名称),以及另一种方法来搜索 ArrayList 中所有每周收入超过用户输入金额的员工??
4回复

如何创建充满不同类型对象的ArrayList?

对于银行系统,我有不同的类别。 这些类是; SavingsAccount StudentAccount NormalAccount 现在,我想创建一个ArrayList并用所有这些不同类的对象填充它,例如,第一个元素是studentaccount1,第二个元素
1回复

Java创建从不同类继承的对象的ArrayList

我很困惑。 我创建了一个抽象类“ Person”,然后从Person中扩展了“ Part-Time Employee”类。 然后,我从Person扩展了一个抽象类,称为“全职员工”。 然后,我创建了两个新类,分别称为“新全职员工”和“终身受雇全职员工”,它们都从全职员工扩展。 我
3回复

如何在Java中创建可调整大小的抽象arrayList [重复]

这个问题已经在这里有了答案: 我无法将元素添加到列表中? UnsupportedOperationException 3个答案 假设 我执行以下操作 它引发以下错误 就我所知,此异常意味着摘要列表无法调整大小。 但是我需要一个可调整大小的
2回复

转换ArrayList 到ArrayList

我知道这听起来很愚蠢,但我确实需要它。 我100%肯定只允许SubClass进入arraylist。 Superlalass中没有其他子类属于该arraylist。 我怎样才能做到这一点? 我的类实现了一个让我使用Nodo而不是NodoMoore的接口,但是getSalida方