2016-05-30 2 views
-2

Привет, поэтому я пытаюсь заглянуть в очередь, но компилятор продолжает бросать, не может найти ошибку символа.Невозможно найти Symbol .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(); 
} 
Смежные вопросы