Перьевой плоттер звездного поиска, перемещающийся с двух несвязанных узлов

#java #a-star #pen

#java #a-star #перо

Вопрос:

У меня возникли проблемы с заданием программирования, это перьевой плоттер, здесь уже было довольно много вопросов по этому поводу.

Вот краткое изложение:

Предполагается, что лист бумаги расположен на сетке, причем оси x и y расположены от 0 до бесконечности (условно). Все чертежи полностью содержатся в этом квадранте и можно предположить, что они умещаются на странице. Всегда можно предположить, что строки не содержатся в других строках. Перо всегда начинается с начала координат (0, 0), но может заканчиваться где угодно. Линии задаются координатами (x, y) (в целых числах) их конечных точек на сетке. Перо может либо провести линию между любыми двумя точками, либо перемещаться (ничего не рисуя) по прямой между любыми двумя точками. Как должно быть очевидно, линия может быть нарисована в любом направлении. Поскольку мы хотим минимизировать общее время рисования фигуры, предположим, что перо движется с постоянной скоростью, так что оптимальным чертежом является тот, который минимизирует общее расстояние, пройденное пером, не рисуя.

Все входные данные будут в файле с последовательностью строк следующего вида:

Линия между x1 y2 и x2 y2

Я использую это для ввода: строка между 0 0 и 2 2

Строка между 4 1 и 4 4

Строка между 4 4 и 4 7

Строка между 2 6 и 4 4

Строка между 4 4 и 6 2

Строка между 6 6 и 4 4

Строка между 2 2 и 4 4

и ребра сохраняются в arraylist. Я не уверен, почему он возвращает исключение NullPointerException

Я почти закончил, за исключением того, что следующий цикл for возвращает исключение, и я не уверен, почему. Он направлен на получение списка всех связанных ребер в графе

Исключение гласит: Исключение в потоке «main» java.lang.Исключение NullPointerException в Nodes.getconnectededeges(Nodes.java:55), которое является строкой цикла for «for (Ребра a : линии»

 public ArrayList<Edges> getConnectedEdges(ArrayList<Edges> lines) {
    ArrayList<Edges> returnData = new ArrayList<Edges>();
    for (Edges a : lines) {
        if(a.getFromNode() == this ){ // if this node is the from node of that edge
        returnData.add(a);

        }
        // if this node is the to node of that edge
        if(a.getToNode() == this){
            returnData.add(a);
        }
    }   
    return returnData;
}
  

Текущая проблема заключалась бы в том, как добраться, скажем, от начала координат (0,0) до несвязанной точки, скажем (2,2)?

Заранее спасибо

Комментарии:

1. Что такое исключение и какая строка его выдает?

2. Исключение гласит: Nodes.getConnectedEdges(Nodes.java:55), который является строкой цикла for «for (Ребра a : линии»

3. Добавьте исключение в сообщение, а не в комментарий.

4. Пожалуйста, опубликуйте трассировку стека. Вы не сказали, КАКОЕ исключение генерируется.

5. Предполагая, что это исключение NullPointerException, это означает, что входные lines данные равны нулю.