Rekursion und ArrayList

nieselfriem

Bekanntes Mitglied
Hallo!

Ich habe ein kleines Programm in dem ich eine XML per DOM parsen lasse. Dieses arbeitet nun rekursiv die ganzen Knoten rekursiv durch. Nun möchte ich nun die enthaltenen Werte in einer ArrayList speichern lassen. Nu wird aber nach meiner bisherigen Methode zu viel in die Liste eingespeichert, da natürlich dieser aufruf list.add(..) ebenfalls rekursiv aufgerufen wird. Nur finde ich bishher keine Idee das Problem zu beheben.
Statt das die folgende XML Datei
Code:
<?xml version="1.0" encoding="UTF-8"?>

<bewerberliste>   
   <bewerber>
      <vorname>Georg</vorname>
      <name>Gutsche</name>
      <beruf>Schlosser</beruf>
      <fuhrerschein klasse="pkw">ja</fuhrerschein>
   </bewerber>
   <bewerber>
      <vorname>Olaf</vorname>
      <name>Vormelchert</name>
      <beruf>Baecker</beruf>
      <fuhrerschein klasse="lkw">ja</fuhrerschein>
   </bewerber>
</bewerberliste>

wird die liste jedoch wie folgt aufgebaut:
Code:
 Element bewerberliste
 Element bewerber

Georg
Georg
Georg


Georg
Gutsche
Georg
Gutsche
Georg
Gutsche

Georg
Gutsche
Schlosser
Georg
Gutsche
Schlosser
Georg
Gutsche
Schlosser


Georg
Gutsche
Schlosser
ja
Georg
Gutsche
Schlosser
ja
Georg
Gutsche
Schlosser
ja
Georg
Gutsche
Schlosser
ja
Georg
Gutsche
Schlosser
ja


Gutsche
Schlosser
ja


Georg
Gutsche
Schlosser
ja
Olaf
Georg
Gutsche
Schlosser
ja
Olaf
Georg
Gutsche
Schlosser
ja
Olaf


Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert


Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Baecker
Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Baecker
Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Baecker

Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Baecker
ja
Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Baecker
ja
Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Baecker
ja
Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Baecker
ja
Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Baecker
ja
Georg
Gutsche
Schlosser
ja
Olaf
Vormelchert
Baecker
ja
Java:
static void unterbaumDurchlaufen(Node knoten) {
    	if (knoten == null) {
    		return;
    	}
    	anzahlKnoten++;
    	
    	if(knoten.getNodeType()==Node.ELEMENT_NODE) {
    		anzahlElemente++;
    		System.console().printf("\n");
    		System.console().printf(" Element %s", knoten.getNodeName());
    		NamedNodeMap attribs = knoten.getAttributes();
    		int anz = attribs.getLength();
    		
    		for(int i=0;i<anz;i++) {
    			Node tmp = attribs.item(i);
    			System.console().printf("\t Attribut "+tmp.getNodeName()
    													  + " = "+tmp.getNodeValue());
      	    }//for
    	}//if
    	if(knoten!=null && knoten.getNodeType() == Node.TEXT_NODE) {
    		if (knoten.getNodeValue()!="") {
    		
    			 String value=knoten.getNodeValue().trim();
    			 if (value.length() > 0) {
    			   System.out.println("Der Wert des Knoten ist: "+value);
    			    al.add(value);//Einfügen in ArrayList (Problem rekuriver merfacher Aufruf)
    		     }
    		}
    	}
    	NodeList kinder = knoten.getChildNodes();
    	
    	if(kinder == null)
    		return;
    		
    	int anzahl = kinder.getLength();
    	
    	for(int i=0; i<anzahl;i++)
    		unterbaumDurchlaufen(kinder.item(i));
    
        for(String item: al) {
    	    System.out.println(item);
        }
    }//unterbaumDurchlaufen
}

Nun benötige ich einen Denkanstoss bzw. bestenfalls einen Vorschlag wie ich dieses Problem behebe.

Gruß niesel
 

Dit

Bekanntes Mitglied
Wenn mich nicht alles täuscht liegt dein Fehler hier:

Java:
al.add(value);//Einfügen in ArrayList (Problem rekuriver merfacher Aufruf)

In deinem Fall wird diese Methode ja öfters aufgerufen, als dir lieb ist, also musst du am besten fragen, ob diese Element bereits drin ist.

in etwa so:

Java:
if (!al.contains(value)){
al.add(value)
}

Dann hast du zumindest keine doppelten Elemente mehr drin, die Frage ist, ob Namen etc. doppelt vorkommen dürfen? dann klappt das natürlich nicht mehr!
 

Dit

Bekanntes Mitglied
Ich weiß ja nicht wofür du es verwenden willst, aber mir scheint es das eine Hashmap da besser wäre.

Sowas in die Richtung:

Hashmap mit Index oder String / ArrayList

Dann hast du jeden Knoten in unter eigenem Index (o.ä.) abgelegt, und behälst ein wenig die XML Struktur bei, in jeder Array List darfst du dann auch wieder gleiche Namen verwenden...

wie willst du sonst die Bewerber auseinander halten?

EDIT hier als Beispiel:

Hashmap<Index, ArrayList> test;

1 / ArrayList(x,x,x,x)
2 / ArrayList(x,x,x,x)

etc..
 

nieselfriem

Bekanntes Mitglied
Im Grunde geht es darum, das aus jedem Bewerber später eine SQL-Input-Anweisung entstehen soll, dai dann in eine Datenbank eingetragen werden soll.
Die XML Dateim soll von einer Webseite stammen wo eine Onlinebewerbungsformular in PHP existiert. Dieses soll dann in eine Javaapplikation + lokaler Datenbank importiert werden können. So der Plan... ;)


Gruß niesel
 

Dit

Bekanntes Mitglied
Gerade dann macht die vorgeschlagene Lösung doch mehr Sinn, immerhin wird es auch für jeden Bewerber einen Datenbank Eintrag geben.

Wenn du es alles in einer ArrayList speichern würdes, könntest du diese ja nur Parsen indem du Beispielsweiße sagst, jede 4 Stelle ist ein Bruch!
In der vorgeschlagenenen Lösung könntest du dir das sparen, und hättest die Probleme beim einlesen nicht. Das verschachteln in einer HashMap kann auch von Vorteil sein!

Die kannst du nachher in einer Forschleife mit einem Index und size der Hashmap einfach wieder rausholen und in der Datenbank speichern.
 

Dit

Bekanntes Mitglied
Gerne! über eine Rückmeldung freut man sich immer!

übrigens kannst du dann auch jede eigene ArrayList mit Contains abprüfen! du macht am Schleifenanfang (nicht in der Schleife) eine neue ArrayList mit Key (index oder String) und prüfst diese in der Schleife auf contains, nach der Schleife fügst du diese in deine Hashmap ein!

das ergebnis müsste dann das sein, was ich dir eben geschrieben, unter jedem Index hast du deine Bewerber sortiert! (je nachdem was du als Key nimmst, hast du sogar nen Identifier um auch einen bestimmten Benutzer einfach aus der Hashmap zu holen).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Rekursion in Baum und ArrayList als Rückgabe Java Basics - Anfänger-Themen 2
A Rekursion ArrayList zurückgeben Rucksack Java Basics - Anfänger-Themen 4
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
M Variablen Rekursion mit 2 Parameteren Java Basics - Anfänger-Themen 4
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
M Lösungsweg Rekursion Java Basics - Anfänger-Themen 1
C StackOverflow bei Rekursion Java Basics - Anfänger-Themen 7
D Rekursion - Ich raffs nicht Java Basics - Anfänger-Themen 16
N Methoden Rekursion mit Kreisen Java Basics - Anfänger-Themen 7
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
J Rekursion Java Basics - Anfänger-Themen 22
T Rekursion Programmierverständnis Java Basics - Anfänger-Themen 12
K Rekursion: Rechenmauer mit Array erstellen Java Basics - Anfänger-Themen 17
K Rekursion einer Zahlenfolge (Ab- und Aufzählung) Java Basics - Anfänger-Themen 6
Zeppi Rekursion Java Basics - Anfänger-Themen 15
V Backtracking und Rekursion Java Basics - Anfänger-Themen 15
L REKURSION Java Basics - Anfänger-Themen 13
Kirby.exe Rekursion Java Basics - Anfänger-Themen 7
N for Schleife durch Rekursion ersetzen Java Basics - Anfänger-Themen 6
X Rekursion Java Basics - Anfänger-Themen 3
H Rekursion Java Basics - Anfänger-Themen 2
D Erste Schritte Rekursion Java Basics - Anfänger-Themen 13
M Rekursion Tage Ansteckung gesamte Bevölkerung Java Basics - Anfänger-Themen 15
M Java Rekursion Java Basics - Anfänger-Themen 9
G Java Rekursion Java Basics - Anfänger-Themen 5
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
N Rekursion Java Basics - Anfänger-Themen 18
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
X Rekursion Rätsel Java Basics - Anfänger-Themen 4
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
W Rekursion Java Basics - Anfänger-Themen 0
D Konsolenausgabe Zahlenfolge Rekursion Java Basics - Anfänger-Themen 3
J Ping Pong Methode mit Rekursion Java Basics - Anfänger-Themen 1
N Rekursion Java Basics - Anfänger-Themen 1
B Rekursion Basic Java Basics - Anfänger-Themen 15
O Rekursion Mergesort Java Basics - Anfänger-Themen 18
G Rekursion Java Basics - Anfänger-Themen 20
M Rekursion Java Basics - Anfänger-Themen 7
F Hilfe bei Rekursion... Java Basics - Anfänger-Themen 4
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
B Rekursion Wurzel Java Basics - Anfänger-Themen 39
O Rekursion ordentlich aufschreiben Java Basics - Anfänger-Themen 2
B Rekursion verstehen Java Basics - Anfänger-Themen 4
O Rekursion Java Basics - Anfänger-Themen 2
E Rekursion verstehen. Java Basics - Anfänger-Themen 4
E Rekursion Kisten befüllen Java Basics - Anfänger-Themen 10
E Rekursion verstehen Java Basics - Anfänger-Themen 2
O Rekursion, String Java Basics - Anfänger-Themen 8
N Invertierte Rekursion??? Java Basics - Anfänger-Themen 5
M Bitte um Hilfe bei Quellcode (Rekursion) Java Basics - Anfänger-Themen 6
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
L Rekursion im Baum Java Basics - Anfänger-Themen 9
E Pfade eines Baums angeben ohne Rekursion Java Basics - Anfänger-Themen 20
L Rekursion Baumknoten Java Basics - Anfänger-Themen 8
L Rekursion größtes Zeichen Java Basics - Anfänger-Themen 8
L Rekursion Modulo Java Basics - Anfänger-Themen 7
I Rekursion Java Basics - Anfänger-Themen 11
H Rekursion Java Basics - Anfänger-Themen 7
N Methoden zur Rekursion (catalansche Zahlen) Java Basics - Anfänger-Themen 4
S Frage zu Rekursion... Java Basics - Anfänger-Themen 15
N Java catalansche Zahlen (Rekursion) Java Basics - Anfänger-Themen 5
S Noch eine Frage zur Rekursion... Java Basics - Anfänger-Themen 11
S Frage zu einer Rekursion Java Basics - Anfänger-Themen 15
F Methoden Abbruchbedingung bei Rekursion Java Basics - Anfänger-Themen 2
Z Rekursion Primzahlen Java Basics - Anfänger-Themen 1
K Rekursion Verständnisfrage Java Basics - Anfänger-Themen 19
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37
M Rekursion Minimums Suche Java Basics - Anfänger-Themen 12
J Rekursion Java Basics - Anfänger-Themen 5
F Aufgabe Rekursion Binärer Baum Java Basics - Anfänger-Themen 15
N Rekursion Java Basics - Anfänger-Themen 2
B Rekursion - Übung Java Basics - Anfänger-Themen 2
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
P Rekursion Java Basics - Anfänger-Themen 19
G Rekursion Beispiel Java Basics - Anfänger-Themen 3
M Rekursion schreiben Java Basics - Anfänger-Themen 16
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T Array Rekursion Java Basics - Anfänger-Themen 1
B lineare und schlichte Rekursion Java Basics - Anfänger-Themen 1
A Rekursion Java Basics - Anfänger-Themen 2
B Rekursion Java Basics - Anfänger-Themen 3
A Rekursion stoppt an der falschen Stelle Java Basics - Anfänger-Themen 4
A Lineare Rekursion Java Basics - Anfänger-Themen 6
P Hilfe zur Rekursion? Java Basics - Anfänger-Themen 2
B Rekursion Schneeflocke - Kurze Frage zur Methode Java Basics - Anfänger-Themen 11
L Rekursion Java Basics - Anfänger-Themen 4
S Rekursion Rückgabe - Türme von Hanoi Java Basics - Anfänger-Themen 16
kilopack15 Rekursion und Schleifen Java Basics - Anfänger-Themen 27
E Rekursion Java Basics - Anfänger-Themen 10
G rekursion nicht verstanden Java Basics - Anfänger-Themen 5
K Rekursion-Verständnisfrage Java Basics - Anfänger-Themen 4
E Methoden String wird in Rekursion nicht überschrieben Java Basics - Anfänger-Themen 2
T 2fach Rekursion. Java Basics - Anfänger-Themen 4
N Rekursion mit if-Anweisung Java Basics - Anfänger-Themen 10
K Methoden Zahlensysteme umwandeln mittels Rekursion Java Basics - Anfänger-Themen 5
H Rekursion Binäre Suche Java Basics - Anfänger-Themen 2
P Methoden Primzahltest mit Rekursion Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben