所以我得到了这个nullpointerexception。我知道它引起的界限,我只是在查看代码中导致它的原因时遇到了麻烦。
import java.util.*;
public class NoDuplicatesQueueWilson<T> implements NoDuplicatesQueueInterfaceWilson<T>
{
private int MAX_QUEUE = 5; // Default array size, small for testing purposes
private T[] items; // The array of the queue.
private int front; // The first entered item of a queue.
private int back; // The last entered item of a queue.
private int count; // A counter.
public NoDuplicatesQueueWilson() // Default constructor
{
T [] items = (T[]) new Object[MAX_QUEUE];
front = 0;
back = MAX_QUEUE-1;
count = 0;
}
// Begin Queue Operations
// isEmpty() checks the array to determine if there is an items in it.
public boolean isEmpty()
{
return count == 0;
}
// isFull() checks to see if the array is full or not.
public boolean isFull()
{
return count == MAX_QUEUE;
}
// enqueue(Object newItem) adds items to the back of the queue if it is not full.
// If it is full, it will double the size of the array of items,
// and re-create the array, adding the item onto the new array.
public void enqueue(T newItem) {
if(!isFull())
{
back = (back+1) % (MAX_QUEUE);
items[back] = newItem;
++count;
}
else
{
MAX_QUEUE = MAX_QUEUE * 2;
System.out.println("The array was full. We've doubled the size.");
T [] items = (T[]) new Object[MAX_QUEUE];
back = (back+1) % (MAX_QUEUE);
items[back] = newItem;
++count;
} // End if
} // End Enqueue
当我在我的驱动程序(带有测试数据)中运行它时,异常发生在给定代码的第43行(我的主类包含方法和构造函数),这是在我的enqueue方法的中间。特别是这一行:
items[back] = newItem;
有关我可能需要做什么或想要查看我的错误的建议吗?
答案 0 :(得分:2)
在构造函数中,您没有初始化T [] items
,但是您正在创建新的局部变量。它应该是
public NoDuplicatesQueueWilson() // Default constructor
{
items = (T[]) new Object[MAX_QUEUE]; // notice the difference
front = 0;
back = MAX_QUEUE-1;
count = 0;
}
修改:另请使用else
方法检查enqueue
部分代码。
答案 1 :(得分:1)
在构造函数中,此行分配给局部变量,而不是实例变量:
T [] items = (T[]) new Object[MAX_QUEUE];
您可以使用items
访问实例变量this.items
:
this.items = (T[]) new Object[MAX_QUEUE];
您也可以使用items = ...
,因为在这种情况下没有歧义。
同样的错误也出现在enqueue(T newItem)
T [] items = ...
方法中。{/ 1}。