Referenzen; ==

Status
Nicht offen für weitere Antworten.

diggaa1984

Top Contributor
hiho,

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:

diggaa1984

Top Contributor
um vermutungen zu entkräften:
Java:
//befindet sich innerhalb der addDirectedEdge(Vertex<T> v, Vertex<T> w) - Methode
v.addNeighbor(w);

//was darin resultiert
@Override
public void addNeighbor(Vertex<T> v) {
	if (! neighbors.contains(v))
		neighbors.add(v);
}//addNeighbour

EDIT: lasse ich den erwähnten Test oben über dem cnfGraphen laufen, so wird alles korrekt erkannt, CHECKS sind true ;(
 
Zuletzt bearbeitet:

diggaa1984

Top Contributor
hm ein wenig konnt ich den zauber eingrenzen:
Java:
//copy vertices and delete stored neighbors
for (Vertex<List<String>> v: cnfDerivGraph.getVertices()) {
	Vertex<List<String>> copy = v.copy();
	copy.getNeighbors().clear();
	synTree.addVertex(copy);
	System.out.println("COPY: " + copy);
	System.out.println("COPY_NEIGHBORS: " + copy.getNeighbors());
}//for

Code:
liefert:

COPY: 1,0 ; [is_producing]
COPY_NEIGHBORS: []
COPY: 0,0 ; [[_PLA_], PLACE]
COPY_NEIGHBORS: [1,0 ; [is_producing]]
COPY: 2,1 ; [>=]
COPY_NEIGHBORS: []
COPY: 1,1 ; [[>=], cmp]
COPY_NEIGHBORS: [2,1 ; [>=]]
COPY: 3,2 ; [3.434e-7]
COPY_NEIGHBORS: []
COPY: 2,2 ; [[_FLO_], FLOAT, num]
COPY_NEIGHBORS: [3,2 ; [3.434e-7]]
.. also trotz clear hat der da noch was drin .. wenn ich nun statt
Code:
copy.getNeighbors().clear()
eine
Code:
v.getNeighbors().clear()
schreibe, dann sind alle Kinder aus copy weg.

Aehm das kann ja nun nur an der Serialisierung liegen:
Java:
@Override
public Vertex<T> copy() {
	Vertex<T> v = null;
	
	try {
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream(bos);
		oos.writeObject(this);
		oos.flush();
			
		ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));	
		v = (Vertex<T>) (ois.readObject());
		
		bos.close();
		oos.close();
		ois.close();
	} catch (Exception e) {
		e.printStackTrace();
	}

	return v;
}//copy

Ich habe keine extra writeObject oder readObject-Methode implementiert oder überschrieben.
Habe ich hier beim Serialisieren etwas nicht beachtet?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Best Practice Wie viele Referenzen machen Sinn? Weniger ist mehr? Allgemeine Java-Themen 1
J Mit Referenzen verkettet Listen. Allgemeine Java-Themen 9
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
kaoZ Best Practice Shared Actions , Referenzen in Gui halten ? Allgemeine Java-Themen 25
K Referenzen finden Allgemeine Java-Themen 6
R Referenzen im Heap anzeigen Allgemeine Java-Themen 3
M Datentypen Referenzen oder seperate IDs vergleichen? Allgemeine Java-Themen 6
D Problem mit Referenzen beim Serialisieren Allgemeine Java-Themen 3
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
A Methoden ohne Referenzen finden Allgemeine Java-Themen 9
E EMF Ecore Modell. Referenzen nach außen. Allgemeine Java-Themen 2
F Referenzen auf Objekte Allgemeine Java-Themen 5
hdi Speichergröße von Objekten & Referenzen Allgemeine Java-Themen 8
S Serialisierung und Referenzen Allgemeine Java-Themen 6
D Referenzen weiterreichen vs. statischer Zugriff Allgemeine Java-Themen 3
G Pointer und Referenzen Allgemeine Java-Themen 3
I Referenzen in Datei speichern Allgemeine Java-Themen 2
G (De)serialisierung und Referenzen Allgemeine Java-Themen 5
J Bibliothek gesucht Ana_lysieren von wss. Referenzen Allgemeine Java-Themen 2
A ArrayListe :Doppelte entfernen -> keine Referenzen Allgemeine Java-Themen 26
O Vektor kopieren (Inhalt, nicht Referenzen) Allgemeine Java-Themen 3
M Übergabe von Referenzen Allgemeine Java-Themen 3
H Referenzen statt Objekte für große Speicherstrukturen Allgemeine Java-Themen 19
P Das leidige Thema: Referenzen Allgemeine Java-Themen 2
N int[] referenzen in ein Array packen, brauche Hilfe. Allgemeine Java-Themen 7
A Referenzen / HashCodes nicht konstant? Allgemeine Java-Themen 2
K Probleme mit Referenzen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben