我正在研究以下问题,以准备进行编码采访:实现一个myQueue类,该类使用2个堆栈实现一个队列。”但是,当我在main()方法中对其进行测试时,我对自己的解决方案非常有信心尝试将数据添加到主堆栈时生成了一个nullPointerException。
我尝试删除所有异常检查器,进行调试,并使用滑铁卢大学提供的Java Visualizer尝试查看可能出了什么问题。
我的课如下:
// Implement a MyQueue class which implements a Queue using two Stacks.
public class q21 {
static class MyQueue{
Stack main;
Stack assistant;
public void enqueue(int data) {
if(main == null) {
main.push(data);
}
while(!main.isEmpty()) {
assistant.push(main.pop());
}
assistant.push(data);
while(!assistant.isEmpty()) {
main.push(assistant.pop());
}
}
public int dequeue() {
if(main.isEmpty()) {
return 0;
}
while(!main.isEmpty()) {
assistant.push(main.pop());
}
int num = assistant.pop();
while(!assistant.isEmpty()) {
main.push(assistant.pop());
}
return num;
}
public int peek() {
while(!main.isEmpty()) {
assistant.push(main.pop());
}
int num = assistant.peek();
while(!assistant.isEmpty()) {
main.push(assistant.pop());
}
return num;
}
}
static class Stack{
Node top;
private class Node{
int data;
Node next;
public Node(int d) {
this.data = d;
}
}
Node stack;
public int peek() {
return top.data;
}
public void push(int item) {
Node node = new Node(item);
stack.next = top;
top = node;
}
public int pop() {
int data = top.data;
top = top.next;
return data;
}
public boolean isEmpty() {
return(top == null);
}
}
public static void main(String[] args) {
MyQueue queue = new MyQueue();
for(int i = 0; i < 10; i++) {
queue.enqueue(i + 1);
}
for(int i = 0; i < 3; i++) {
queue.dequeue();
}
}
}
当我运行main方法时,它似乎在main.push(data)
上的enqueue方法中生成了nullPointerException错误。
空指针异常如下:
Exception in thread "main" java.lang.NullPointerException
at q21$MyQueue.enqueue(q21.java:10)
at q21.main(q21.java:81)
是什么导致此nullPointerException,以及如何将其删除?