StackOverflowError bei Rekursion

Status
Nicht offen für weitere Antworten.

Reen

Bekanntes Mitglied
Hallo!

Ich will's mal kurz beschreiben. Verkettete Liste sieht stark vereinfacht so aus -> [index][name][nächster_index] d.h. eine ArrayList in jedem Listenknoten.

z.B. würde so ein Teil der Liste aussehen.
[1][Eintrag][2]
[2][---------][-]

Aufgabe ist es, diese Einträge wieder zu löschen und mit vordefinierten Werten zu füllen, die quasi anzeigen, dass diese Listeneinträge wieder frei sind.
z.B
[1][$wieder_frei][-]
[2][$wieder_frei][-]

Im ersten Teil suche ich den Namen, der gelöscht werden soll und halte den Index fest, wo dieser auf den nächsten Eintrag hinzeigt. Das ist auch kein Problem.

Im nächsten Schritt übergebe ich den Folgeindex an eine neue Funktion, die nur noch nach den Index'en sucht. Da ich diese Funktion aber jedesmal rekursiv aufrufe, tritt der im Titel genannte Fehler auf.

Code:
public static void index(String naechster_index)
{  
     // werte aktuellen Konten aus
     // folgen weite, wenn JA
    index(naechster);
}

Habe auch schon versucht, den aktuellen Knoten immer als Startpunkt zu übergeben, damit die Liste nich immer von ganz oben durchlaufen werden muss. Hat aber auch nicht gefunzt.

Jemand ne Idee, wie man das anders machen könnte? Wenn das eventuell zu wenig war, poste ich das nächste Mal mehr orginalen Code!

Danke
Reen
 
S

SlaterB

Gast
eine Rekursion über 100te Listenelemente ist nun mal nicht sinnvoll,

was spricht gegen ein einfaches
Code:
Element e = first;
boolean break = false;
while (!break) {
  e = e.next();
  ...
}
oder ähnlich?
 

Reen

Bekanntes Mitglied
Die Idee ist vllt nicht schlecht, habe aber noch vergessen zu sagen, dass der Index, der auf den nächsten Listenknoten zeigt, nicht unbedingt auf seinen direkten Nachfolgeknoten zeigen muss. Es kann auch sein, dass dieser auf einen übernächsten oder oder oder zeigt.

z.B.
[1][EintragEINS][3]
[2][EintragZWEI][-] -> kein Folgeknoten
[3][----------------][-] -> kein Folgeknoten

d.h. in diesem Fall würde dein Ansatz ja versagen, wenn ich das richtig sehe, da ich ja hier nicht jeden beliebigen Knoten beachten darf. Falls es doch geht, würde ich mich über einen Tipp von dir freuen.

Ich habe jetzt einen anderen Ansatz probiert, der auch erstma soweit funktionieren zu scheint. Ich habe mir eine Klassenbasierte ArrayList definiert, in der ich die Index'e sammle und gleichzeitig immer den letzten Index als Vergleichsindex für den nächsten Listenknoten verwende. z.B. nächster Index wäre die 3, dann kommt die in die ArrayList und beim weiteren Durchsuchen der Liste nutze ich die 3, um den Knoten mit dem Index 3 auf einen FolgeIndex auszuwerten. Im obrigen Bsp hätte der 3.te Knoten dann keinen Verweiss mehr.

Hoffe das habe ich halbwegs verständlich rübergebracht :lol:

gruss
Reen
 
S

SlaterB

Gast
> d.h. in diesem Fall würde dein Ansatz ja versagen, wenn ich das
> richtig sehe, da ich ja hier nicht jeden beliebigen Knoten beachten
> darf. Falls es doch geht, würde ich mich über einen Tipp von dir freuen.

ich habs nicht genau verstanden, aber in der Rekursion kannst du ja auch nicht zaubern,
wenn du dort zum nächsten Elment gelangst, dann genausogut nichtrekursiv
 

DaKo

Bekanntes Mitglied
Du musst nur die Methode next richtig definieren ;)

D.h. next geht nicht zum nächsten Index sondern zum Nachfogerindex. SlaterBs Ansatz ist der weitaus einfachere (und bessere, finde ich). Es würde ja auch niemand die Fakultät rekursiv berechnen (hoffe ich zumindest).
 

ARadauer

Top Contributor
DaKo hat gesagt.:
Es würde ja auch niemand die Fakultät rekursiv berechnen (hoffe ich zumindest).

das sind aber immer die Bispiele die benutzt werden um die Rekursion zu lehren.
man lernt ja nicht fürs leben sondern für die schule :autsch: :autsch:
 

Reen

Bekanntes Mitglied
Ok...dann hier mal ein wenig Code. Das wäre jetzt meine Methode um erstmal nach den Namen zu suchen und den ersten Verweis auf einen eventuell dazugehörigen anderen Listenknoten festzuhalten.

Vllt kennt ihr ja ne Möglichkeit, die Idee von Slater dirket in der Methode mit umzusetzen, anstatt das in eine neue Methode zu verpacken.

Mal an einer Beispielliste.
[1][javaforum][3]
[2][c_plusplus][ED]
[3][-------------][5]
[4][delphi___][ED]
[5][-------------][ED]

d.h. ich möchte jetzt z.B. die Index'e 1, 3 und 5 rausgreifen und die Namenseinträge durch den String $free und die Index'e die auf einen anderen Listenknoten zeigen durch "-1" ersetzen. "ED" heisst, dass es keine Verweise gibt. Als erstes würde ich ja den String "javaforum" an diese Methode übergeben und den Index 3 festhalten. Muss hier auch mit RegEx arbeiten, da ich die String's aus einem ByteArray hole.

Wie könnte man das jetzt mit Slaters Methode machen?

Danke
Reen


Code:
public static void loeschen(String name)
	{
		 Knoten aktuellerKnoten = kopf;
	    String free = "$free";
		 String nextcl = "-1";
	    ArrayList<byte[]> v;
	   
	    while (aktuellerKnoten != null)                
		    { 
		      if (aktuellerKnoten.element instanceof ArrayList)	{ 	
		  			v = (ArrayList) aktuellerKnoten.element;
		  			
		  		  String namef = new String(((byte[])(v.get(1))));
		  		  Pattern p = Pattern.compile(name, Pattern.CASE_INSENSITIVE);
			       Matcher m = p.matcher(namef); 
			       boolean result = m.lookingAt();
			       if (result == true)	{
			    		byte[] fname  = new byte[190];
						 byte[] nextc   = new byte[7];
		    			
						 String nextindex = new String((byte[])(v.get(2)));
				       Pattern pb = Pattern.compile("[0-9]+");
				       Matcher mb = pb.matcher(nextindex);
				       while (mb.find())
				    	{	del_nextcluster(mb.group());	}   // Methode aufrufen, die nur die Folgeindex'e auswertet
						
				    	System.out.println(" READY!\n");
				    	
				    	/**
			    		free.getBytes(0, 5, fname, 0);
		    			v.set(1, fname);
		    			
		    			nextcl.getBytes(0, 2, nextc, 0);
		    			v.set(5, nextc);
		    			
				    	**/
				    	//break;
			    		}
		  		}		      
		      aktuellerKnoten = aktuellerKnoten.naechster;
		    }  
	}
 
S

SlaterB

Gast
was ist denn das Problem, geht es nicht so wie es ist?

Code:
while {
  naechster Knoten in Reihenfolge
  if (bedingung an Knoten) {
    ..
  }
}
ist doch eine respektable Alternative und spontan gesagt sogar besser als
Code:
while {
  berechne kompliziert naechsten Treffer-Knoten
  ..
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
ashi StackOverflowError Java Basics - Anfänger-Themen 3
H Collections StackOverflowError in einer Queue Java Basics - Anfänger-Themen 3
F Exception in thread main java.lang.StackOverflowError Java Basics - Anfänger-Themen 3
X StackOverflowError, finde den Fehler nicht Java Basics - Anfänger-Themen 5
J StackOverflowError Java Basics - Anfänger-Themen 9
D StackOverflowError Java Basics - Anfänger-Themen 8
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
A stackOverFlowError Java Basics - Anfänger-Themen 11
G Rekursives aufrufen führt zu StackOverflowError Panel durchl Java Basics - Anfänger-Themen 5
F Wieso java.lang.StackOverflowError (minimales programm) Java Basics - Anfänger-Themen 11
M java.lang.StackOverflowError Java Basics - Anfänger-Themen 2
M StackOverflowError Java Basics - Anfänger-Themen 6
G StackOverflowError Java Basics - Anfänger-Themen 2
S StackOverflowError Java Basics - Anfänger-Themen 16
S StackOverflowError Java Basics - Anfänger-Themen 2
R StackOverflowError Java Basics - Anfänger-Themen 7
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

Ähnliche Java Themen

Neue Themen


Oben