ich stehe total auf dem Schlauch. Ich verstehe nicht warum er das tut.
Beim ersten Durchlauf speichert er an 0er Stelle bei newdata die Daten richtig ab. Meine numsub und ports sind richtig.
Und bei der Bearbeitung vom zweiten Knoten ändert er newdata(0) mit den Daten die eigentlich für newdata(1) bestimmt sind. :bahnhof: Wie kann er newdata an dieser Stelle verändern??? Das verstehe ich nicht...
Code:
for (int k = 0; k < nodecategory.size(); k++) {
String cat = (String) nodecategory.get(k);
ArrayList newdata = new ArrayList();
//Vector newdata = new Vector();
System.out.println("********************************************************");
ArrayList data = // ArrayList der Daten;
if(data.size() == 0) {continue;}
for (int i = 0; i < data.size(); i++) {
// Spalte in Verwendung
ArrayList nd = (ArrayList) data.get(i);
// Knoten hinzufügen
if(anodegen != null)
{
ArrayList returnl = addNodes(nd); // Liste mit zusätzlichen Knoten die erst dann generiert werden
ArrayList newdataadd = (ArrayList) returnl.get(0);
Integer numsub = (Integer) returnl.get(1);
Integer ports = (Integer) returnl.get(2);
for (int j = 0; j < nouse.size(); j++)
{
ArrayList no = (ArrayList) nouse.get(j);
if(no.get(0).equals("NUM_SUBUNITS"))
{
no.set(1, numsub); // AN DIESER STELLE ÜBERSCHREIBT ER newdata(0)
} else if (no.get(0).equals("ANZAHLPORTS")) {
no.set(1, ports); // AN DIESER STELLE ÜBERSCHREIBT ER newdata(0)
}
// unverwendete Spalte
nd.add(no);
}
newdata.add(nd);
// Hinzufügen der Knoten an die ursprüngliche Knotenliste
for (int j = 0; j < newdataadd.size(); j++) {
ArrayList ndadd = (ArrayList) newdataadd.get(j);
newdata.add(ndadd);
}
System.out.println();
} else {
for (int j = 0; j < nouse.size(); j++)
{
// unverwendete Spalte
nd.add(nouse.get(j));
}
newdata.add(nd);
}
}
schönes Beispiel für Code, den niemand verstehen soll,
falls du es selber versucht, dann baue evtl. übeall noch
System.out.println("Variable xy enthält Liste "+liste.hashcode()+", Inhalt: "+liste);
so erkennst du, ob das zweite nd gleich dem ersten ist oder ähnliches,
bei so einem riesigen Code ist das natürlich schwierig, aber besser als nix
die ArrayList verändert habe, haben sich alle anderen ArrayLists automatisch mit verändert. Dadurch hatte ich dann überall diese falschen Werte drin auch in newdata.
ich bin jetzt den quelltext nur kurz überflogen, aber ich glaube, du bist über die tatsache gestolpert, dass ArrayList.add() ein Objekt zur Liste hinzufügt, keine Kopie! Wenn du also
Code:
String a = "bla";
ArrayList list = new ArrayList();
list.add(a);
a = "test";
list.add(a);
verwendest, wird mit dem 2.add das a, was schon in der liste ist, ebenfalls mit "test" belegt und ist somit 2mal in der liste
Besser wäre:
Code:
ArrayList list = new ArrayList();
list.add(new String("bla"));
list.add(new String("test"));