hiho,
ich sitz grad ein wenig hilflos vor folgender situation .. erstma der Code:
auf gut deutsch:
es gibt 2 Graphen cnfDerivGraph und synTree. Der 1. Graph soll in ein Baumobjekt umgewandelt werden. Dazu habe ich vorher alle Knoten aus dem cnfDerivGraph kopiert (mittels Serialisierung) und im synTree eingefügt. Ein Knoten speichert intern eine ID, Datenfeld und eine Liste seiner direkten Kindsknoten (Knoten, welche in einem Schritt vom Knoten x erreicht werden können).
Wenn ich die Knoten in das Baumobjekt kopiere, so kennt der Baum zwar die Knotenobjekte, aber die interne AdjanzenzMatrix ist noch leer. Um diese Konsistent aufzubauen, muss ich nun die Kanten im Baum einfügen, genauso wie sie im cnfDerivGraph vorliegen. Vorher leere ich die Liste<Kindsknoten> bei allen Knoten im Baum. Diese Liste bei Einfügen von Kanten gefüllt.
So der Code da oben macht nun folgendes:
Für jeden Knoten (v) im cnfGraph suche ich den jeweiligen identischen Knoten (t) per ident-Attribut (ist unique innerhalb eines Graphen) im synTree.
Ist t der gefunden, so suche ich für jeden Kindsknoten (n) von v im cnfGraph, wieder per ident den identischen Knoten (child) im synTree.
Ist auch der gefunden, so kann ich nun im synTree eine Kante von t nach child einfügen.
was ich dann ausgebe ist der Test ob der 1. gefundene Kindsknoten von t auch genau dem entspricht, welcher bei addDirectedEdge angegeben wurde.
hm ich steh n bissel aufm schlauch weil ich den fehler nich finde
habe ich was bezüglich Referenzen und Objekte im speicher noch nich kapiert?
Das heisst für mich: Alle Kindsknoten-Verweise sind nicht in der Knotenmenge des Baumes vorhanden, oder was meint ihr? Wenn ich die Knotenmenge des Baumes ausgebe sind sie ja alles da, aber ich bin darauf gestossen, da ich später die inhalte der noten manipuliere, und prompt sah ich ... in der knotenmenge des baumes ist alles richtig, die datenfelder der knoten sind korrekt, aber die datenfelder der Kindsknoten-Verweise sind nach wie vor unberührt und nicht konsistent mit den Knoten im Baum, welche die selbe ID haben wie die Kinder
ich sitz grad ein wenig hilflos vor folgender situation .. erstma der Code:
Java:
//create synTree with main root-node of cnf tree
synTree = new DefaultTree<List<String>>(cnfRoots.get(0).copy());
treeNodes = synTree.getVertices();
//copy vertices and delete stored neighbors
for (Vertex<List<String>> v: cnfDerivGraph.getVertices()) {
Vertex<List<String>> copy = v.copy();
copy.getNeighbours().clear();
synTree.addVertex(v.copy());
}//for
//copy dependecies of vertices into the tree
for (Vertex<List<String>> v: cnfDerivGraph.getVertices()) {
for (Vertex<List<String>> t: treeNodes) {
if (t.getIdent().equals(v.getIdent())) {
for(Vertex<List<String>> n: cnfDerivGraph.getNeighbors(v)) {
for (Vertex<List<String>> child: treeNodes) {
if (child.getIdent().equals(n.getIdent())) {
synTree.addDirectedEdge(t, child);
System.out.println("CHECK: " + (t.getNeighbours().get(0) == child));
System.out.println(child);
System.out.println(t.getNeighbours().get(0));
}//if
}//for
}//for
}//if
}//for
}//for
auf gut deutsch:
es gibt 2 Graphen cnfDerivGraph und synTree. Der 1. Graph soll in ein Baumobjekt umgewandelt werden. Dazu habe ich vorher alle Knoten aus dem cnfDerivGraph kopiert (mittels Serialisierung) und im synTree eingefügt. Ein Knoten speichert intern eine ID, Datenfeld und eine Liste seiner direkten Kindsknoten (Knoten, welche in einem Schritt vom Knoten x erreicht werden können).
Wenn ich die Knoten in das Baumobjekt kopiere, so kennt der Baum zwar die Knotenobjekte, aber die interne AdjanzenzMatrix ist noch leer. Um diese Konsistent aufzubauen, muss ich nun die Kanten im Baum einfügen, genauso wie sie im cnfDerivGraph vorliegen. Vorher leere ich die Liste<Kindsknoten> bei allen Knoten im Baum. Diese Liste bei Einfügen von Kanten gefüllt.
So der Code da oben macht nun folgendes:
Für jeden Knoten (v) im cnfGraph suche ich den jeweiligen identischen Knoten (t) per ident-Attribut (ist unique innerhalb eines Graphen) im synTree.
Ist t der gefunden, so suche ich für jeden Kindsknoten (n) von v im cnfGraph, wieder per ident den identischen Knoten (child) im synTree.
Ist auch der gefunden, so kann ich nun im synTree eine Kante von t nach child einfügen.
was ich dann ausgebe ist der Test ob der 1. gefundene Kindsknoten von t auch genau dem entspricht, welcher bei addDirectedEdge angegeben wurde.
Code:
Ausgabe zB:
CHECK: false
1,0 ; [is_producing]
1,0 ; [is_producing]
CHECK: false
2,1 ; [>=]
2,1 ; [>=]
CHECK: false
3,2 ; [3.434e-7]
3,2 ; [3.434e-7]
CHECK: false
4,3 ; [;]
4,3 ; [;]
CHECK: false
2,2 ; [[_FLO_], FLOAT, num]
2,2 ; [[_FLO_], FLOAT, num]
hm ich steh n bissel aufm schlauch weil ich den fehler nich finde
habe ich was bezüglich Referenzen und Objekte im speicher noch nich kapiert?
Das heisst für mich: Alle Kindsknoten-Verweise sind nicht in der Knotenmenge des Baumes vorhanden, oder was meint ihr? Wenn ich die Knotenmenge des Baumes ausgebe sind sie ja alles da, aber ich bin darauf gestossen, da ich später die inhalte der noten manipuliere, und prompt sah ich ... in der knotenmenge des baumes ist alles richtig, die datenfelder der knoten sind korrekt, aber die datenfelder der Kindsknoten-Verweise sind nach wie vor unberührt und nicht konsistent mit den Knoten im Baum, welche die selbe ID haben wie die Kinder
Zuletzt bearbeitet: