2016-12-12 3 views
0

Я создал интерфейс LLIterator, который расширяет итератор и добавляет к нему два метода, когда я пытался использовать его в одном из моих классов, я не смог его скомпилировать. Вот что я получил. мой пользовательский интерфейс выглядит так:не может найти метод из моего интерфейса

 import java.util.Iterator; 

     public interface LLIterator<T> extends Iterator<T>{ 

     boolean hasNext(); 

     T next(); 

     void remove(); 

     void addBefore(T element); 

     void addAfter(T element); 

     } 

мой LinkedList, как это:

import java.lang.StringBuilder; 
import java.util.NoSuchElementException; 
import java.util.Iterator; 
import java.util.ArrayList; 


/** 
* A class to represent a linked list of nodes. 
*/ 
public class LinkedList<T> implements Iterable<T>{ 
    /** the first node of the list, or null if the list is empty */ 
    private LLNode<T> first; 

/** some codes here 

@Override 
    public LLIterator<T> iterator() { 
    return new LinkedListIterator(); 
    } 

    private class LinkedListIterator implements LLIterator<T>{ 
    LLNode<T> nodeptr = first; 
    final LinkedList<T> list = getList(); 

    @Override 
    public void addBefore(T element){ 
     if(nodeptr == first || list.isEmpty()){ 
     throw new NoSuchElementException(); 
     } 
     LLNode<T> newnode = new LLNode<T>(element, null); 
     newnode.setNext(nodeptr); 
    } 

    @Override 
    public void addAfter(T element){ 
     LLNode<T> newnode; 
     if(nodeptr == first || list.isEmpty()){ 
     newnode = new LLNode<T>(element, null); 
     list.setFirst(newnode); 
     } 
     newnode = new LLNode<T>(element, null); 
     newnode.setNext(nodeptr.getNext()); 
     nodeptr.setNext(newnode); 
    } 
    } 

в другом классе, я использовал метод итератора в этой Linkedlist и называется addBefore метод, однако, когда я скомпилировать его он показывает

cannot find symbol 
    symbol: method addAfter(WordData) 
    location: variable iterator of type java.util.Iterator<WordData> 

здесь является частью моего другого класса:

public void addFollowingWord(String word){ 
    Iterator<WordData> iterator = list.iterator(); 
    WordData current = iterator.next(); 
    while(iterator.hasNext()){ 
     if(current.getWord().equals(word)){ 
     current.incrementCount(); 
     } 
     else if(current.getWord().compareTo(word) < 0){ 
     current = iterator.next(); 
     } 
     else if(current.getWord().compareTo(word) > 0){ 
     WordData newword = new WordData(word); 
     iterator.addBefore(newword); 
     } 
    } 
    if(!iterator.hasNext()){ 
    WordData newword = new WordData(word); 
     iterator.addAfter(newword); 
    } 
} 

Я очень смущен, я где-то ошибся, или что-то пропустил?

+1

разместить полный код вашего класса – firephil

+1

принять плз посмотреть, спасибо большое – Rio

ответ

4

Вы не можете получить доступ к методам на пользовательском интерфейсе, потому что он отличен как Iterator. Обновите метод iterator() вернуть подинтерфейс:

@Override 
public LLIterator<T> iterator() { 
    return new LinkedListIterator(); 
} 
+0

спасибо большое за забираю время, чтобы ответить на мой вопрос, но после того, как ее изменить как вы сказали, кажется, не работает ... не могли бы вы взглянуть на новые коды, которые я публикую. – Rio

+0

@Rio Вы по-прежнему используете интерфейс «Итератор». Вам нужно использовать 'LLIterator '. – shmosel

+0

sry man, я не изменился здесь, но я изменил свой код, все равно дает мне ту же ошибку. – Rio

Смежные вопросы