2017-04-16 28 views
0

發現節點的名單我一直有與下面的代碼的問題:的Java得到最後一個元素從內部的PriorityQueue

問題代碼:

Node lastPeek=pq.peek(); 
tempList3.add(lastPeek.n1.get(n1.size()-1)); 

其中PQ是一個PriorityQueue(存儲類型節點的對象(進一步查看節點類),其中包含List<Node>和double類型的對象)。時Queue以下列方式聲明:

Comparator<Node> comparator= new CostComparator(); 
//creation of priority queue of type Node 
PriorityQueue<Node> pq=new PriorityQueue<Node>(comparator); 

tempList3(從問題代碼部分)是具有以下聲明一個ArrayList:

List<Node> tempList3=new ArrayList<Node>(); 

以下是Node類的一部分:

public int dest; 
    public Node next; 
    public Node parent; 
    double cost=0; 
    List<Node> n1=new ArrayList<Node>(); 

    public Node(int d) { 
     dest = d; 
     next = null; 
     parent = null; 
    } 

    //used for storing objects into PriorityQueue pq 
    public Node(List<Node> n, double icost) { 
     n1=n; 
     cost=icost; 
    } 

如描述爲「問題代碼」的代碼的部分看到的,我一直在試圖類型的到時Queue PQ執行窺視()操作,並將該值存儲在Node類型的lastPeek中。問題出現了,當我嘗試使用.n1.get(n1.size() - 1)獲取List值中的最後一個節點時,因爲n1.size()未被識別。

我收到錯誤

找不到符號 - 變量N1

在不用彷徨

(n1.size() - 1)的一部分。我的主要目標是獲得具有PriorityQueue pq的第一個元素,然後獲取第一個元素的List部分,然後讓我得到List中的最後一個Node值(這就是爲什麼我一直試圖使用.get(n1 .size() - 1))。在PriorityQueue中的元素被存儲在以下結構:

Node n=new Node(List<Node> , double); 
+0

你是什麼意思' 「......未被識別」?你有編譯問題嗎?如果是這樣,請發佈完整的錯誤信息與您的問題。 –

+0

問題:爲什麼你要以這種方式使用公共字段和直接字段訪問?這增加了代碼的複雜性和連通性,增加了錯誤的風險。 –

+0

我得到錯誤在.get(n1.size() - 1)部分中找不到符號變量n1。我會照辦的! @HovercraftFullOfEels – Alisinna

回答

1

你需要從lastPeek你使用它這樣既時間推遲N1:

tempList3.add(lastPeek.n1.get(lastPeek.n1.size()-1)); 
+0

謝謝!這對我有用! – Alisinna

相關問題