2016-12-12 20 views
0

iteratorを拡張して2つのメソッドを追加するLLIteratorというインターフェイスを作成しました。クラスの1つで使用しようとするとコンパイルできませんでした。ここに私が持っているものがあります。 は私のカスタムインターフェイスは、このようなものです:私のインターフェイスからメソッドを見つけることができません

 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のiteratorメソッドを使用してaddBefore法と呼ばれる、しかし、私はそれをコンパイルするとき

:、それは私の別のクラスの一部であり、ここで

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

を示し0

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あなたはまだ 'Iterator'インターフェースを使用しています。 'LLIterator 'を使う必要があります。 – shmosel

+0

sry man、私はここでは変更されませんでしたが、私のコードで変更されましたが、私には同じエラーが表示されます。 – Rio

関連する問題