2016-05-30 8 views
-2

こんにちは、私はキューを覗いてみようとしていますが、コンパイラはシンボルエラーを見つけることができません。シンボルが見つからない.peek()

public class HelloWorld{ 

interface Queue<T> { 
Queue<T> enqueue(T ele); 
T dequeue(); 
} 

public static class QueueArray<T> implements Queue<T>{ 

    int top; 
    private T[] arr; 
    private int total, next; 
    public int first; 

    public QueueArray() 
    { 
     arr = (T[]) new Object[2]; 
     top = 0; 
    } 

    private void resize(int capacity) 
    { 
     T[] tmp = (T[]) new Object[capacity]; 

     for (int i = 0; i < total; i++){ 
      tmp[i] = arr[(first + i) % arr.length]; 
     } 

     arr = tmp; 
     first = 0; 
     next = total; 
    } 

    public QueueArray<T> enqueue(T ele) 
    { 
     if (arr.length == total) 
     { 
      resize(arr.length * 2); 
     } 
     arr[next++] = ele; 
     if (next == arr.length) 
     { 
      next = 0; 
     } 
     total++; 
     return this; 
    } 

    public Object peek(){ 

     if(first > 0){ 
      return arr[first - 1]; 
     } 
     else{ 
      return null; 
     } 

    } 



    public T dequeue() 
    { 
     if (total == 0) 
     { 
      throw new java.util.NoSuchElementException(); 

     } 
     T ele = arr[first]; 
     if (++first == arr.length) 
     { 
      first = 0; 
     } 
     if(--total > 0 && total == arr.length/4) 
     { 
      resize(arr.length/2); 
     } 
     return ele; 

    } 

} 


public static void main(String []args){ 
    Queue<Integer> greeting = new QueueArray<>(); 

    greeting.enqueue(1).enqueue(2).enqueue(3); 

    System.out.println(greeting.dequeue()); 
    System.out.println(greeting.peek()); 
    System.out.println(greeting.dequeue()); 
    System.out.println(greeting.dequeue()); 
    System.out.println(greeting.dequeue()); 

} 
} 

私は.peek()と同じ方法で綴られているように何が起こっているのか分かりません。どんな助けもありがとうございます。

+1

あなた 'Peek'方法は、あなたのインターフェイス上に存在していません。 – Blorgbeard

+0

ああ、ありがとうございます。 – Pat

答えて

3

あなたのキューインスタンスは、インタフェースの型で宣言されています

Queue<Integer> greeting = new QueueArray<>(); 

だから、コンパイラは、あなたがそれを呼び出すpeek機能のために、インタフェースではなく、具体的なQueueArrayクラスを見ています。

だから、インターフェイスにpeekメソッドを追加する必要があります。

interface Queue<T> { 
    Queue<T> enqueue(T ele); 
    T dequeue(); 
    T peek(); 
} 
関連する問題