我创建了一个类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
错误,我似乎无法弄明白为什么,我已阅读了我的书,看起来好像我和根据他们所拥有的狗和狗狗的例子来做到这一点。关于我出错的地方的任何建议都非常感谢!
另外,如果您对我的代码有任何疑问,请询问,我在课堂和对象方面比较新,但我会尽力解释自己!
答案 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<>();