# Rekursiv Länge eines Strings berechnen



## ignos (8. Jan 2010)

Folgende Aufgabe:

_Schreiben Sie eine statische, rekursive Methode zur Berechnung der Länge einer Zeichenkette.
Benutzen Sie dafür aus der Klasse String *nur *die Methoden *equals *und *substring*,
insbesondere also *nicht *die Methode *length*._

Ich habe so meine Schwierigkeiten mit Rekursion, es ist auch nicht sehr förderlich, dass ich schon einige Stunden noch andere Aufgaben gemacht habe.

Folgendes Grundgerüst hab ich gemacht:


```
public class Laenge
{
	static int laengeR(String wort) 
	{
		if (wort.equals(" ")) {
			return 0;
		}
		else 
		{
			return...
		}
	}
	
	public static void main(String[]args)
	{
		System.out.println(laengeR("Test"));
	}
}
```
tja beim wichtigen return hänge ich. Über eine Hilfestellung würde ich mich freuen, bitte keine Komplettlösung. THX


----------



## eRaaaa (8. Jan 2010)

ignos hat gesagt.:


> tja beim wichtigen return hänge ich. Über eine Hilfestellung würde ich mich freuen, bitte keine Komplettlösung. THX



Also erstmal ist equals(" "); return 0 falsch, denn ein Leerzeichen ist auch ein ganz normales Zeichen, daher wohl eher equals(""); und nicht return 0 sondern eben die Zahl/Länge die du bis dahin ermittelt hast

Zu deiner return: Da kommt jetzt wohl der rekursive Aufruf. D.h. du musst die Methode nochmal aufrufen, aber nicht mit dem gleichen String! (Tip: substring(int begin)


Gruß


----------



## ignos (9. Jan 2010)

Hmm.. ne krieg ich irgendwie nicht hin!! 
also substring(int beginindex) gibt den String von der position beginindex bis zum Ende aus, ok ist klar. Also muss ich irgendwie den String um einen Buchstaben kurzen bei jedem durchlauf, so dass am Ende "" Zeichen übrig bleiben und die bis dahin gezählten durchläufe ausgäben, da dass ja dann die länge des Wortes ist!!


----------



## noobadix (9. Jan 2010)

Hrr, das hab ich bisher, aber bekomme da so ne blöde fehlermeldung, die ich nicht deuten kann: 

edit: stumpfsinn gelöscht


----------



## eRaaaa (9. Jan 2010)

@noobadix:

Irgendwie zu kompliziert, das sind max 5 Zeilen mit allen Klammern 
Ausserdem: laengeR("Hallo") & while(laengeR(wort) ..deine Methode erwartet aber 2 Parameter

@ ingos:

Ja genau so 



> Also muss ich irgendwie den String um einen Buchstaben kurzen bei jedem durchlauf



Genau das macht ja substring für dich dann (substring(1)) ...


----------



## noobadix (9. Jan 2010)

edit: noch mehr stumpfsinn gelöscht

edit: aber das ist jetzt nicht rekursiv...wie im folgenden Beitrag freundlichst bemerkt...gnah


----------



## eRaaaa (9. Jan 2010)

noobadix hat gesagt.:


> ```
> public class test{
> public static void main(String[] args){
> System.out.println(laengeR("Hallo"));
> ...



Da hast du die Rekursion vergessen :lol:


----------



## ignos (9. Jan 2010)

```
public class Laenge
{
	static int laengeR(String wort) 
	{
		if (wort.equals("")) {
			return 0;
		}
		else 
		{
			return 1 + laengeR(wort.substring(1));
		}
	}
	
	public static void main(String[]args)
	{
		System.out.println(laengeR("Hallo555"));
	}
}
```

Hmm hab das jetzt so hinbekommen dank deiner Hilfe! Es funktioniert auch. Irgendwas falsches dran was ich übersehen habe und in der Aufgabenstellung vorkommt, die sind nämlich bei der Korrektur sehr penibel was die Aufgabenstellung betrifft.


----------



## eRaaaa (9. Jan 2010)

Nein, so ist`s perfekt ! 

Man würde evtl. lieber das


```
wort.equals("")
```

umdrehen zu


```
"".equals(wort)
```

aber passt schon 

(hier bringts ja sowieso nichts  )


----------



## ignos (9. Jan 2010)

stimmt, super danke für die schnelle und gute Hilfestellung  kann ich doch noch beruhigt ins bett gehen und Wochenende genießen ohne an die Hausarbeiten zu denken.

@noobadix

Danke für die Mühen, aber wie du selber gesehen  hast musst der ganze Mist rekursiv ablaufen.


----------



## noobadix (9. Jan 2010)

Japp, werd mal meine runtergefallenen Schuppen auffegen und lesen lernen, besonders so lange Sätze wie "Bitte keine Komplettlösungen"


----------

