Java:类内的队列

Java:类内的队列,java,class,object,for-loop,queue,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 publ

我创建了一个类
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;
}
我在尝试将员工添加到队列时收到一个
NullPointerException
错误,我似乎不知道为什么,我翻阅了我的书,似乎是根据他们的狗和狗玩具的例子来完成的。非常感谢您对我的错误提出的任何建议


另外,如果您对我的代码有任何疑问,请询问,我对类和对象都比较陌生,但我会尽我所能解释我自己

看起来您需要创建队列。由于没有,它默认为
null
。因此:

b.getQueue()
正在返回
null

所以当你打电话的时候

b.getQueue().add(...)
您正试图调用
null
上的方法,这会导致异常

如果是这种情况,那么解决方案将是在
书籍
构造函数中创建队列:

public Book()
{
     Employees = new Deque<Employee>(); // pick an implementation of the Queue interface
}
公共图书()
{
Employees=new Deque();//选择队列接口的实现
}

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

Sonce队列是一个您无法执行的接口

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

有没有可能包括堆栈跟踪?这通常可以很好地指导代码被破坏的位置和原因(超出哪一行)。代码中没有员工队列初始化。如果任何一个提供商的答案对你的问题有帮助,接受它作为答案,而不是直接投票。哇,我不敢相信我忘记了,我还有一个问题,就是在我的整个程序中,我会发现需要编辑每本
书的队列顺序,我能用我当前的设置做到这一点吗?如果没有,有什么建议吗?还有,它说我不能实例化Queue类型,有什么想法吗?
Queue
是一个接口,所以您需要选择其中一个,例如
Deque
。我将更新答案以使用该答案。不确定关于订单的其他问题。您可以为FIFO排序选择
队列
。如果您需要不同的顺序,那么您可能不应该使用
队列
?我可以为相同的事情使用数组吗?另外,在我的整个程序中,我会发现需要更新队列的顺序,通过这个过程我能做到吗?如果是,如何实现?数组不是队列的实现,所以不,只要您想使用队列,就不能使用数组。看看:。在这里,您可以找到实现队列的所有类。更改LinkedList的顺序根本不是问题。啊,我明白了!因此,我要做的就是将项目添加到
图书
队列中
getQueue.add(anEmployee)
?好的,我现在开始获取它,为了更新队列的顺序,我将使用
getQueue
,然后我对如何根据优先级对其进行排序感到有点困惑。类似于
对于队列中的员工,对队列进行排序
,然后执行
设置队列(newSortedQueue)
?让员工实现
可比
界面并使用
集合。sort()
。请参阅:。您不必调用
setQueue()
,因为排序方法正在对传递的列表进行排序。
    Queue<Employee> Employees = new Queue<>(); //won't work, because Queue is an interface
    Queue<Employee> Employees = new LinkedList<>();