Rekursiv Länge eines Strings berechnen

ignos

Mitglied
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:

Java:
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
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
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ß
 
Zuletzt bearbeitet:

ignos

Mitglied
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

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

edit: stumpfsinn gelöscht
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
@noobadix:

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

@ ingos:

Ja genau so :D

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

Bekanntes Mitglied
edit: noch mehr stumpfsinn gelöscht

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

eRaaaa

Top Contributor
Java:
public class test{
	public static void main(String[] args){
		System.out.println(laengeR("Hallo"));
	}

	public static int laengeR(String wort){
		int zaehler =0;
		if(wort.equals("")){
			return 0;
	     	}
		else{
	          while(!wort.substring(1).equals("")){
	               	zaehler++;
			wort = wort.substring(1);
	          }
        	  return ++zaehler;
		}
	}
}

Da hast du die Rekursion vergessen :lol:
 

ignos

Mitglied
Java:
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.
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Nein, so ist`s perfekt !

Man würde evtl. lieber das

Java:
wort.equals("")

umdrehen zu

Java:
"".equals(wort)

aber passt schon :)

(hier bringts ja sowieso nichts :) )
 
Zuletzt bearbeitet:

ignos

Mitglied
stimmt, super danke für die schnelle und gute Hilfestellung :D 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.
 
Zuletzt bearbeitet:

noobadix

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

Oben