2017-07-02 74 views
-4

我想完成使用Stack類的peek方法。我試圖返回頂部元素的值。如何返回節點類型的值?

public class stack<T> implements StackInt<T> 
{ 
    Node<T> root;  
    public boolean isEmpty() 
    { 
     Node<T> top = root; 
     if(top == null) 
     { 
      return true; 
     } 
     return false; 
    } 

public T peek() throws EmptyStackException 
    { 
     Node<T> top = root; 
     if(isEmpty()) 
     { 
      throw new EmptyStackException("stack underflow"); 
     } 
     return top.val; 
    } 
} 

當我編譯它給了我一個錯誤:

stack.java:34: error: cannot find symbol 
     return top.val; 
       ^
    symbol: variable val 
    location: variable top of type Node<T> 
    where T is a type-variable: 
    T extends Object declared in class stack 

下面是Node類:

public class Node<T> 
{ 
    T data; 
    Node<T> next; 

    public Node(T data, Node<T> next) 
    { 
     this.data = data; 
     this.next = next; 
    } 

    public String toString() 
    { 
     return "" + this.data; 
    } 
} 

什麼是我的語法錯誤?我試圖使用節點來創建peek/push/pop方法。但我不得不在我的代碼中使用T的泛型類型。

謝謝

+2

由於錯誤是想告訴你,你試圖返回一個領域,不存在。 – SLaks

+0

我們需要查看Node源代碼。請參閱[mcve]。 – GhostCat

+3

'節點'沒有'val'成員。你期望如何訪問它? – Guy

回答

1

datanext私人和添加干將

public class Node<T> { 
    private T data; 
    private Node<T> next; 

    public Node(T data, Node<T> next) { 
     this.data = data; 
     this.next = next; 
    } 

    public T getData() { 
     return this.data; 
    } 

    public Node<T> getNext() { 
     return this.next; 
    } 

    public String toString() { 
     return "" + this.data; 
    } 
} 

用途:top.getData();

+0

謝謝,我完全誤解了我班的結構。這是有道理的,我做了什麼,你做了什麼。 – nitric0