2016-05-30 10 views
-2

Hallo, also ich versuche, eine Warteschlange zu sehen, aber der Compiler wirft immer wieder einen Symbolfehler finden kann nicht finden.Kann Symbol nicht finden .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()); 

} 
} 

Ich verstehe nicht, was da los ist gehen, wenn ich die .peek() aufrufen es die gleiche Art und Weise geschrieben ist. Jede Hilfe wird geschätzt.

+1

Ihre 'Peek' Methode nicht auf Ihrer Schnittstelle nicht vorhanden ist. – Blorgbeard

+0

ah, danke, ich bin immer noch ziemlich neu für diese Dinge, danke. – Pat

Antwort

3

Deine Warteschlange-Instanz wird mit der Art der Schnittstelle deklariert:

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

So ist der Compiler an der Schnittstelle suchen wird, nicht die konkrete QueueArray Klasse, für die peek Funktion, wenn Sie es nennen.

So müssen Sie die peek Methode zur Schnittstelle hinzuzufügen:

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