public class ObjQueue<E> extends Vector<E>
{...}
ObjQueue<Customer>[] line=new ObjQueue[numServices];
...
if(line[waitingLine].isEmpty()) --emptyLines;
NullPointerException
适用于if(line[waitingLine].isEmpty()) --emptyLines;
出了什么问题?
答案 0 :(得分:3)
这很可能是因为line[waitingLine]
为空,因此您无法在空对象上调用isEmpty
。您要检查的代码应如下所示:
...
if(line[waitingLine] != null && line[waitingLine].isEmpty())
...
我假设示例代码中的...表示您将值放入行数组中。但是,如果不是这种情况,则必须填入这些值。实例化数组时,它只是为数组分配空间。在显式设置之前,所有数组槽基本上都将填充为空。
填写line的waitingLine插槽的示例代码:
line[waitingLine] = new objQueue<Customer>();
您可以显式填充所有插槽,创建一个循环并将队列对象放在每个插槽中。
但是,如果你想要动态增长/缩小的东西,那么你可能想要创建一个List。
答案 1 :(得分:3)
此:
new objQueue[numServices];
创建一个数组,其所有元素都设置为null
- 而不是一个空队列数组。所以这个:
line[waitingLine].isEmpty()
除非您以某种方式明确初始化isEmpty()
的元素,否则将在null
上调用line
。
你可能想要遵循这个:
objQueue<Customer> [] line=new objQueue[numServices];
用这个:
for(int i = 0; i < numServices; ++i)
line[i] = new objQueue<Customer>();
将每个元素初始化为一个新的不同队列。
答案 2 :(得分:0)
试试这个:
public class objQueue<E> extends Vector<E>
{...}
objQueue<Customer>[] line = new objQueue[numServices];
for(int i = 0; i < numServices; i++){
line[i] = new objQueue<Customer>();
}
...
if(line[waitingLine].isEmpty()) --emptyLines;