Java:A类中的队列

时间:2015-11-04 23:58:10

标签: java class object for-loop queue

我创建了一个类Book,其中包含我创建的另一个类的队列Employees,如下所示...

class Employee{
String name;
int waiting_time;
int retaining_time;
int priority;

public Employee()
{
    this.waiting_time=0;
    this.retaining_time=0;
}

//getters and setters ommitted to save space

public void setPriority()
{
    priority = waiting_time - retaining_time;
}

public int getPriority()
{
    return priority;
}
}

class Book{
String name;
LocalDate start_date;
LocalDate end_date;
boolean archived;
Queue<Employee> Employees ;

public Book()
{

}

//getters and setters for end_date, start_date, archived ommitted to save space

public void setQueue(Queue<Employee> qa)
{
    Employees = qa;
}

public Queue<Employee> getQueue()
{
    return Employees;
}

当我尝试将Employee添加到Book's队列...

public static void addEmployee(String aName, ArrayList<Book> booksToCirculate, ArrayList<Employee> employeeArray)
{
    Employee anEmployee = new Employee();
    anEmployee.setName(aName);
    employeeArray.add(anEmployee);
    for (Book b : booksToCirculate)
    {
        b.getQueue().add(anEmployee); //adds employee to each queue, where the error is at
    }

}

我在尝试将员工添加到队列时收到NullPointerException错误,我似乎无法弄明白为什么,我已阅读了我的书,看起来好像我和根据他们所拥有的狗和狗狗的例子来做到这一点。关于我出错的地方的任何建议都非常感谢!

另外,如果您对我的代码有任何疑问,请询问,我在课堂和对象方面比较新,但我会尽力解释自己!

2 个答案:

答案 0 :(得分:2)

看起来你需要创建你的队列。但事实并非如此,默认为b.getQueue() 。因此:

null

正在返回b.getQueue().add(...)

所以当你打电话

null

你试图在Book上调用导致异常的方法。

如果是这种情况,那么解决方案是在public Book() { Employees = new Deque<Employee>(); // pick an implementation of the Queue interface } 构造函数中创建队列:

{{1}}

答案 1 :(得分:1)

您没有初始化Queue。您必须在访问它之前对其进行初始化,否则编译器会使用null对其进行初始化。

Sonce Queue是一个你不能做的界面

    Queue<Employee> Employees = new Queue<>(); //won't work, because Queue is an interface

您可以使用LinkedList实施Queue

    Queue<Employee> Employees = new LinkedList<>();