在递归 Java 方法中反转队列时出错
Error reversing queue in recursive Java method
我正在尝试编写一个递归 方法来反转队列中的所有元素。
在实现 Queue< T > 接口的抽象 class myQueue 中是我的 reverse方法:
public void reverse() {
T temp = dequeue();
Queue<T> bufferQueue = new Queue<T>();
if(!(temp == null)){
bufferQueue.enqueue(temp);
}
if(!(isEmpty())) {
reverse();
}else{
while(!(bufferQueue.isEmpty())){
Queue.enqueue(bufferQueue.dequeue);
}
}
}
接口 Queue< T > 具有以下方法完整(并且隐式地按照定义执行):
public boolean isEmpty();
public int size();
public void enqueue(T e);
public T dequeue();
public T front();
我的目标:
在我的反向方法中,我的目标是不断从我的原始队列中递归地出队(删除第一个元素)直到我的队列是空的。每次我出列时,我都会将该对象放入 temporary 队列中。当我的队列为空时,我会从 临时队列 enqueue 返回到我原来的队列。
我的第一个问题是定义一个新的临时队列,在我的例子中是 bufferQueue。我得到以下信息:
1. ERROR at solution.java (at line 12)
Queue<T> bufferQueue = new Queue<T>();
^^^^^
Cannot instantiate the type Queue<T>
你需要有一个具体类型而不是 T,T 在实例化时是不可能的。
Queue
是一个接口。您不能创建接口的实例。
检查队列的 JavaDoc 并选择实现 Queue
的 Class:
https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html
您要完成的事情非常简单,根本不需要递归,只需要具体 class 上可用的方法,例如 ArrayDeque
+ 您的自定义反向方法。此外,您不需要中间 bufferQueue
。这应该很好用:
public class MyQueue<T> extends ArrayDeque<T>{
public void reverse() {
T[] contents = toArray(T[]);
clear();
if(contents != null){
for(int i = contents.length-1; i >= 0; i--){
add(contents[i]);
}
}
}
}
我正在尝试编写一个递归 方法来反转队列中的所有元素。
在实现 Queue< T > 接口的抽象 class myQueue 中是我的 reverse方法:
public void reverse() {
T temp = dequeue();
Queue<T> bufferQueue = new Queue<T>();
if(!(temp == null)){
bufferQueue.enqueue(temp);
}
if(!(isEmpty())) {
reverse();
}else{
while(!(bufferQueue.isEmpty())){
Queue.enqueue(bufferQueue.dequeue);
}
}
}
接口 Queue< T > 具有以下方法完整(并且隐式地按照定义执行):
public boolean isEmpty();
public int size();
public void enqueue(T e);
public T dequeue();
public T front();
我的目标:
在我的反向方法中,我的目标是不断从我的原始队列中递归地出队(删除第一个元素)直到我的队列是空的。每次我出列时,我都会将该对象放入 temporary 队列中。当我的队列为空时,我会从 临时队列 enqueue 返回到我原来的队列。
我的第一个问题是定义一个新的临时队列,在我的例子中是 bufferQueue。我得到以下信息:
1. ERROR at solution.java (at line 12)
Queue<T> bufferQueue = new Queue<T>();
^^^^^
Cannot instantiate the type Queue<T>
你需要有一个具体类型而不是 T,T 在实例化时是不可能的。
Queue
是一个接口。您不能创建接口的实例。
检查队列的 JavaDoc 并选择实现 Queue
的 Class:
https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html
您要完成的事情非常简单,根本不需要递归,只需要具体 class 上可用的方法,例如 ArrayDeque
+ 您的自定义反向方法。此外,您不需要中间 bufferQueue
。这应该很好用:
public class MyQueue<T> extends ArrayDeque<T>{
public void reverse() {
T[] contents = toArray(T[]);
clear();
if(contents != null){
for(int i = contents.length-1; i >= 0; i--){
add(contents[i]);
}
}
}
}