Проблема при создании списка смежности объектов, которые имеют имя и массив имен, от которых зависит - PullRequest
0 голосов
/ 15 апреля 2019

Я принимаю строку, которая состоит из отформатированных строк, за которыми следует "\ n".Формат включает в себя имя объекта и 0 или более имен объектов, от которых он зависит. У меня возникла проблема при попытке найти хороший способ построения списка смежности из этого.Я могу разбить каждую строку на части и создать из нее объект, а также добавить его в карту или список, состоящий из связанных списков, но у меня по-прежнему возникают проблемы при попытке прохождения каждого внутреннего массива зависимостей и сравнения их с другими объектами длядобавьте их в связанный список зависимых объектов.

Я попытался использовать ArrayList из LinkedLists, но для его запуска я получаю цикл массива, затем цикл каждого связанного списка, затем циклкаждого массива зависимостей, и я застреваю, пытаясь сравнить каждую строку в этом массиве с именем индекса 0 других связанных списков.

Я также попытался использовать HashMap, где я храню имяобъект и LinkedList объектов, но это примерно одна и та же проблема.

Я изучил множество учебных пособий по спискам смежности и графам в целом, но большинство из них представляют собой отдельные не сложные элементы с ребрами для других не сложных элементов.,У меня проблемы с переносом этого в мой вариант использования.

ниже - пример того, что я пытаюсь сделать.

// expected input
StringBuffer sb=new StringBuffer();

sb.append("target:target2 target4:outcommand\n"
+"target2:target3:outcommand\n"
+"target4:target5:outcommand\n"+"target3::outcommand\n"
+"target5::outcommand\n");

// methods and variables

public class Graph {
    // instance variables
    private Map<String, LinkedList<Node>> adjMap;

    public Graph(StringBuffer input) {
        adjMap = new HashMap<String, LinkedList<Node>();
        // break buffer into string array
        String tempString = input.toString();
        String[] strArr = tempString.split("\n");
        for (String s : strArr) {
            //create nodes and populate the Map
            //identify ':' indexes to parse the steing
            Node tempNode = new Node(targetName, dependencyArray, outcommand);
            LinkedList<Node> tempList = new LinkedList<>();
            tempList.add(tempNode);
            adjMap.put(targetName, tempNode);
        }
    }

    private void buildDependencies() {
        /*
         * go through each Nodes dependency array and check against each key, if match
         * is found add a copy of the matching node to the LinkedList of the node
         * depending on it
         */
    }

    private class Node {
        Node(String targetName, String[] depArray, String outcommand) {
            // build the node
        }
    }
}

// Expected output: runCheck(target4) = "target5 outcommand"

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

...