2016-05-30 58 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<>(); 

因此,編譯器將看接口,而不是具體的QueueArray類,爲peek功能,當你調用它。

所以,你需要的peek方法添加到接口:

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