Java получает последний элемент из списка узлов, найденных в PriorityQueue

У меня возникла проблема со следующим кодом:

КОД ПРОБЛЕМЫ:

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

где pq — это PriorityQueue (хранящая объекты типа Node (см. класс Node ниже), содержащие объекты типа List<Node> и double). PriorityQueue объявляется следующим образом:

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;
    }

Как видно из части кода, описанной как «КОД ПРОБЛЕМЫ», я пытался выполнить операцию peek() для PriorityQueue pq типа <Node> и сохранить значение в lastPeek типа Node. Проблема возникает, когда я пытаюсь получить последний узел в значении списка, используя .n1.get(n1.size()-1), поскольку n1.size() не распознается.

я получаю сообщение об ошибке

не может найти символьную переменную n1

в части .get(n1.size()-1). Моя главная цель — получить первый элемент с помощью PriorityQueue pq, а затем получить часть списка этого первого элемента, что затем позволит мне получить значение последнего узла в списке (вот почему я пытался использовать .get(n1 .size()-1) ). Элементы PriorityQueue хранятся в следующей структуре:

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

person Alisinna    schedule 16.04.2017    source источник
comment
Что вы имеете в виду под "...is not being recognised"? У вас проблемы с компиляцией? Если это так, пожалуйста, опубликуйте полное сообщение об ошибке с вашим вопросом.   -  person Hovercraft Full Of Eels    schedule 17.04.2017
comment
Побочная проблема: почему вы используете общедоступные поля и прямой доступ к полям таким образом? Это увеличивает сложность и связанность вашего кода, увеличивая риск ошибок.   -  person Hovercraft Full Of Eels    schedule 17.04.2017
comment
Я получаю сообщение об ошибке: не могу найти символьную переменную n1 в части .get(n1.size()-1). Я сделаю так! @HovercraftFullOfEels   -  person Alisinna    schedule 17.04.2017
comment
Что ж, n1 не является общедоступным, так что, возможно, это ваша проблема. Но, сказав это, я снова советую не делать его публичным, а лучше сделать все поля приватными и контролировать доступ через публичные методы.   -  person Hovercraft Full Of Eels    schedule 17.04.2017
comment
@HovercraftFullOfEels Я пытался сделать его общедоступным, но у меня все та же проблема. Я также попытаюсь изменить их на частные, хотя сомневаюсь, что в этом случае это решит саму проблему. Большое спасибо за твою помощь! :)   -  person Alisinna    schedule 17.04.2017
comment
Посмотрите еще раз на свой код: lastPeek.n1.get(n1.size()-1). Первый n1 имеет квалификацию lastPeek, второй — нет. Теперь, почему вы думаете, что это не скомпилируется?   -  person Andreas    schedule 17.04.2017


Ответы (1)


Вам нужно будет отложить n1 от lastPeek каждый раз, когда вы используете его следующим образом:

tempList3.add(lastPeek.n1.get(lastPeek.n1.size()-1));
person Sir RotN    schedule 16.04.2017