在递归Java方法中反转队列时出错

时间:2016-02-28 14:43:20

标签: java recursion queue reverse

我正在尝试编写递归方法来反转队列中的所有元素。

在抽象类 myQueue 中实现队列< T> 界面是我的反向方法:

CloudFront wasn't able to connect to the origin.

界面队列< T> 具有以下完成的方法(隐式按定义执行):

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);
    }
  }

}

我的目标:

在我的反向方法中,我的目标是不断地出列(从第一个元素中删除第一个元素)递归,直到我的队列为空。每次我出队时,我都会将该对象放在临时队列中。当我的队列为空时,我将排队从我的临时队列重新导入我的原始队列。

我的第一个问题是定义一个新的临时队列,在我的情况下是 bufferQueue 。我得到以下内容:

public boolean isEmpty();
public int size();
public void enqueue(T e);
public T dequeue();
public T front();

2 个答案:

答案 0 :(得分:4)

Queue是一个界面。您无法创建接口的实例。 检查JavaDoc for Queue并选择实现Queue的类:

https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html

您要完成的任务非常简单,并且根本不需要递归,只需要具体类的可用方法,例如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]);
        }
      }
  }
}

答案 1 :(得分:-2)

你需要有一个没有T的具体类型,在进行异化时是不可能的。