Я пытаюсь написать рекурсивный метод для изменения всех элементов в очереди.

В абстрактном классе myQueue , который реализует Queue & lt; Интерфейс T & gt; - это мой обратный метод:

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

}

Интерфейс Очередь & lt; T & gt; имеет следующие методы, которые являются полными (и неявно выполняют то, что определено):

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

Моя цель:

В моем обратном методе я стремлюсь постоянно исключать (удалять первый элемент) из моей исходной очереди рекурсивно, пока моя очередь не станет пустой. Каждый раз при удалении из очереди я помещаю этот объект во временную очередь. Когда моя очередь пуста, я делаю поставку из моей временной очереди обратно в исходную очередь.

Моя первая проблема - это определение новой временной очереди, в моем случае bufferQueue . Получаю следующее:

1. ERROR at solution.java (at line 12)
Queue<T> bufferQueue = new Queue<T>();
                           ^^^^^
Cannot instantiate the type Queue<T>
1
coders 28 Фев 2016 в 17:43

2 ответа

Лучший ответ

Queue - это интерфейс. Вы не можете создать экземпляр интерфейса. Проверьте JavaDoc для очереди и выберите вместо этого класс, реализующий 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]);
        }
      }
  }
}
4
pczeus 28 Фев 2016 в 15:30

У вас должен быть конкретный тип, а не T, T невозможно при создании экземпляра.

-2
Henning Luther 28 Фев 2016 в 14:45