Реализация очереди в Java, но не может переопределить метод iterator () - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь расширить свои знания об интерфейсе очереди, реализовав его в своем собственном классе «MyQueue».Однако я хочу переопределить метод iterator ().Поскольку я не могу одновременно реализовать интерфейсы Iterator и Queue, я в растерянности.

В моем методе iterator () Eclipse выдает ошибку, cannot convert from MyQueue<E>.QueueIterator to Iterator<E>, когда я нахожу курсор мыши наПодчеркивание красным цветом под словами new QueueIterator().

Кроме того, когда я пытаюсь реализовать свой внутренний класс "QueueIterator", Eclipse выдает мне ошибку, syntax error on token "class", @ expected, когда я наводю курсор мыши на подчеркивание красного цвета под словом * 1008.*.

В приведенных ниже примерах кода я удалил все методы, не имеющие отношения к моему вопросу.Я знаю, что я должен реализовать эти методы для реализации очереди.Я просто пытаюсь прояснить проблему.

Как мне переопределить метод iterator ()?

Класс MyQueue:

import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Queue;

/**
 * A custom queue class. Uses a singly-linked list.
 */
public class MyQueue<E> implements Queue {
   // the top of the queue
   private Node<E> first;
   private int size;

   /**
    * Creates new myQueue object
    */
   public MyQueue() {
      first = null;
      current = null;
      size = 0;
   }

   @Override
   public Iterator<E> iterator() {
      return new QueueIterator();
   }

  /**
   * Holds Objects and points to the next one.
   *
   */
  private class Node<E> {
     private E data;
     private Node<E> next;

     /**
      * Creates a Node object
      * @param data The Object to be held by the Node
      */
     Node(E data) {
        this.data = data;
        this.next = null;
     }

     private Node<E> getNext() {
        return this.next;
     }

     private E getData() {
        return this.data;
     }
  }

  /**
   * Iterator implementation
   */
  private class QueueIterator() {

     private Node<E> curNode;

     public QueueIterator() {
        curNode = null;
     }

     public boolean hasNext() {
        if(curNode == null && first != null) {
           return true;
        } else if (curNode.getNext() != null) {
           return true;
        } else {
           return false;
        }
     }

     public E next() {
        if(curNode == null && first != null) {
           curNode = first;
           return curNode.getData();
        }

        if(!hasNext()) {
           throw new NoSuchElementException();
        }

        curNode = curNode.getNext();
        return curNode.getData();
     }
  }

1 Ответ

0 голосов
/ 12 декабря 2018

QueueIterator необходимо реализовать Iterator<E>.

В этой строке не должно быть скобок:

  private class QueueIterator() {

Это должно быть просто:

  private class QueueIterator {

На самом деле:

  private class QueueIterator implements Iterator<E> {
...