Hallo Forum,
Adjazenzliste von hier: http://www.java-forum.org/java-basics-anfaenger-themen/95061-adjazenzliste-datenstruktur.html
Ich habe hier noch kleinere Problemchen, welche ich auch noch nicht wirklich verstehe:
Vielen Dank für jegliche Hinweise und mfg Huck
Adjazenzliste von hier: http://www.java-forum.org/java-basics-anfaenger-themen/95061-adjazenzliste-datenstruktur.html
Java:
TreeMap<Double, SpecialObject> myLocalVIR; // als Parameter in Methode übergeben
Iterator<SpecialObject> itLocalVIR = myLocalVIR.values().iterator(); //Iterator
SpecialObject vpData = null;
//Mehr als 2 Knoten?
if (myLocalVIR.size() > 1){
log.info("Nodecount: 2 or more nodes.");
MeineAdjazList tmpNode = new MeineAdjazList();
vpData = myLocalVIR.firstEntry().getValue();
if (vpData == null) vpData=itLocalVIR.next();
while(!myLocalVIR.isEmpty()){
// Put last/first (vpData) as FromNode
tmpNode.setFromNode(vpData);
// calc nearest next Node and their distances
tmpNode.setToNode(calcRest(tmpNode.fromNode, myLocalVIR));
tmpNode.setDistanceBetween(tmpNode.calcDistanceBetween());
// remove that node from myLocalVIR
myLocalVIR.remove(this.getKey(vpData, myLocalVIR));
// add toNode and save for next round
myReturnVIR.add(tmpNode);
vpData = tmpNode.toNode; // tmpNode.fromNode = tmpNode.toNode
Ich habe hier noch kleinere Problemchen, welche ich auch noch nicht wirklich verstehe:
- -- NullPointerException (Zeilen 8&9 oben). Mit if (myLocalVIR.size() > 1) führe ich Nachfolgenden Code doch nur aus, wenn ich mehr als 2 Knoten habe? Und wenn dem so ist, nöcht eich zB die nächste Value aus myLocalVIR holen. Meine Lösung ist doppelt gemoppelt, wobei ich anders eine NullPointerException bekomme ???:L
- -- NullPointerException 2 (Zeile 15 oben). Wie man unten sieht, haben meine Adjazenzlisten die Struktur MeineAdjazList(SpecialObject fromNode, double distance, SpecialObject toNode). Anfangs ist meine tmpNode leer und dann wird fromNode gesetzt und dann toNode berechnet. Aus diesen beiden wird dann deren Abstand zueinander berechnet, womit dann alle 3 Werte komplett wären.. Wird die Exceptoin geworfen, weil ich den mittleren Wert aus den beiden anderen berechne?
- -- NullPointerException 3 (Zeile 7 unten). Er setzt den mittleren Wert und gibt returnt es gleichzeitig zurück, da ich es beispielsweise für weitere Berechnungen brauchen könnte, und mir dann so nochmaliges auslesen aus tmpNode.getDistance() erspare..
Java:
public class MeineAdjazList {
protected SpecialObject fromNode;
protected double distanceBetween;
protected SpecialObject toNode;
//...
public double calcDistanceBetween() {
return this.distanceBetween = calcDistance(this.fromNode.getPosition(), this.toNode.getPosition());
}
Vielen Dank für jegliche Hinweise und mfg Huck