Rekursiv 2 Strings vergleichen

Status
Nicht offen für weitere Antworten.

duuugle

Mitglied
Hab schon einiges an Java Erfahrung. Hab da eine alte Klausur von der FH und würde gerne wissen, wie ich 2 Strings rekusriv vergleiche. Hier mal die Anageb:

geg: 2 STrings s1 und s2 beliebiger Länge. Rekursive Funktion soll true zurückgeben, wenn beide gleich sind.

so soll es aussehen.

Code:
static boolean recfunktion(String s1, String s2) {

}
Hab schon per google gesucht, aber finde nichts. Alles was ich finde, ist rekusriv iregnwas mit int-werten machen. Das kann ich, aber nicht mit Strings.

Hoffe jemand weis da was.
 

FelixB

Bekanntes Mitglied
der Unterschied ist doch gar nicht so groß.

betrachte einen String als Folge von Zeichen. Du vergleichst die ersten beiden und erhältst ein boolean. Anschließend machst du solange mit den nächsten Zeichen weiter, bis entweder ein String zuende ist oder ein false kommt.

Tipp:

Code:
return (c1 == c2) && recfunction(substring1, substring2)
 
G

Guest

Gast
Stimmt das so, denn es soll unbedingt als Rekursion gelöst werden, denn sonst sind es 0 Punkte???


Code:
public class Rekursion {
static int x=0;
	static boolean recCompare(String s1, String s2) {
		
		System.out.println(s1+s2);
		System.out.println(x++);
		
		while(  s1.length()!=0 && s2.length()!=0){
			
			recCompare(s1.substring(0,s1.length()-1),s2.substring(0,s2.length()-1))  ;
			System.out.println("fertig");
			return true;
		
		}
		return false;
			
		
	}
	

	
	
	
	public static void main (String... args) {
	
		String s1 = "Hallo";
		String s2 = "Hallo";
		
		System.out.println( recCompare(s1,s2) );
		
		char last  = s1.charAt( s1.length() - 1) ;
		
		System.out.println(last);
		
		
		
		
		
	}
}
 
G

Guest

Gast
Anonymous hat gesagt.:
Stimmt das so, denn es soll unbedingt als Rekursion gelöst werden, denn sonst sind es 0 Punkte???


Code:
public class Rekursion {
//static int x=0;
	static boolean recCompare(String s1, String s2) {
		
		System.out.println(s1+s2);
	//	System.out.println(x++);
		
		while(  s1.length()!=0 && s2.length()!=0){
			
			recCompare(s1.substring(0,s1.length()-1),s2.substring(0,s2.length()-1))  ;
			System.out.println("fertig");
			return true;
		
		}
		return false;
			
		
	}
	

	
	
	
	public static void main (String... args) {
	
		String s1 = "Hallo";
		String s2 = "Hallo";
		
		System.out.println( recCompare(s1,s2) );
		
		char last  = s1.charAt( s1.length() - 1) ;
		
		System.out.println(last);
		
		
		
		
		
	}
}
 

moormaster

Top Contributor
Anonymous hat gesagt.:
Stimmt das so, denn es soll unbedingt als Rekursion gelöst werden, denn sonst sind es 0 Punkte???

Das kannst du doch leicht testen, indem du es mit einigen Strings ausprobierst?

Den Sinn der while-Schleife versteh ich allerdings nicht.

Solange s1 und s2 leer sind rufe sich selbst auf, gebe "fertig" aus und verlasse (!!) die Schleife indem true zurückgegeben wird.

Ein einfaches if genügt anstelle der Schleife.

So nun zum Inhaltlichen:

Deine Rückgabewerte sind doch völlig willkürlich und sagen überhaupt nichts darüber aus, ob der String gleich ist oder nicht.

Du rufst z.B. deine Methode rekursiv auf ohne das Ergebnis weiterzuverarbeiten. Statt dessen wird dann einfach true zurückgegeben. Was ist, wenn der Rekursive Aufruf false zurückgibt? In dem Fall würdest du immer ein true daraus machen.

Ein rekursiver Vergleich 2er Strings müsste eher so ablaufen:
Code:
 Methode recCompare(String s1, String s2)
 {
   wenn s1 und s2 unterschiedlich lang sind, gebe false zurück (Strings sind unterschiedlich)

   sind s1 und s2 jeweils von der Länge 0, gebe true zurück (leere Strings sind immer identisch)

   wenn der erste Buchstabe von s1 sich vom ersten Buchstaben aus s2 unterscheidet, gebe false zurück (Strings sind unterschiedlich)

   rufe recCompare(s1.substring(1), s2.substring(1)) auf und gebe dessen Ergebnis zurück
   (erste Buchstaben von s1 sowie von s2 werden weglassen durch substring(1))
 }
 

duuugle

Mitglied
Code:
public class Rekursion {
static int x = 0;
    static boolean recCompare(String s1, String s2) {
        
        //System.out.println(s1+s2);
        System.out.println(x++);
        
        if(s1.length() != s2.length())
            return false;
        
        
        while (s1.charAt(0)==s2.charAt(0)){
            
            if(s1.length()!=0 || s2.length() != 0)
                System.out.println(s1+s2);        
        
             return recCompare(s1.substring(1), s2.substring(1));
        }
                
        return false;
        
    }
    
    public static void main (String... args) throws IOException {
    
        String s1 = "Hallo";
        String s2 = "Hallo";
        
        System.out.println( recCompare(s1,s2) );
        
        char last  = s1.charAt( s1.length() - 1) ;
        
        System.out.println(last);
        
        
    }
}

kann mir jemand sagen warum mir eine StringIndexOutOfBoundsException wirft
 

moormaster

Top Contributor
Weil in deiner Rekursion keine Abbruchbedingung drin steckt.

Das einzige Mal, wann ein endgültiges Ergebnis zurückgegeben wird, ist wenn sich die Länge der Eingabestrings unterscheiden. Sind sie gleich, dann rufst du immer wieder die Funktion rekursiv auf und entfernst das erste Zeichen. Undzwar auch dann, wenn es gar kein erstes Zeichen mehr gibt und genau das wird die Stelle sein, welche diesen Fehler verursacht.

Wie ich schon vorher angedeutet hab, musst du, wenn beide Strings leer sind, sofort ein true zurückgeben, weil sie dann identisch sind. Dann wird auch kein weiterer rekursiver Aufruf mehr stattfinden, welcher aus den leeren Strings das erste Zeichen versucht wegzulassen :D

Des weiteren hast du die while Schleife immernoch nicht gegen eine if Bedingung ausgetauscht... welchen Sinn macht eine Schleife, die eh nur höchstens einmal durchlaufen werden kann, weil ein return Befehl drin steht?
 

duuugle

Mitglied
Alles klar, jetzt hab ich den Fehler auch entdeckt. Danke

Ja es wäre besser wenn ich statt der while eine if schleife mache.
 

VuuRWerK

Aktives Mitglied
duuugle hat gesagt.:
[...] eine if schleife [...]

Sorry aber für diese Ausage wäre ich dafür Dich zu kicken/bannen/löschen/Atomrakete/... Nein, im Ernst, BITTE NIE eine if-Schleife sondern ein Statement oder wie auch immer Du es nennen willst, aber eine if-Schleife gibt es nicht!!!!!!!!!

Danke. :)

Gut Schuß
VuuRWerK ;)
 

moormaster

Top Contributor
Solange while-Schleifen mit max. einem Durchlauf erlaubt sind, sind auch if-Schleifen mit höchstens einem Durchlauf erlaubt... :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
H Passwort Brute Force rekursiv Java Basics - Anfänger-Themen 7
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
R0m1lly Kombinationen aus int array rekursiv Java Basics - Anfänger-Themen 2
L Rekursiv gegebenes Passwort herausfinden. Java Basics - Anfänger-Themen 2
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
H Binominalkoeffizient tail-rekursiv in java darstellen Java Basics - Anfänger-Themen 0
GAZ Tribonacci Folge Rekursiv Java Basics - Anfänger-Themen 11
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
A Ackermmanfunktion rekursiv Java Basics - Anfänger-Themen 4
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
H Rekursiv Methode ausführen bei Kindern Java Basics - Anfänger-Themen 12
G Methode Rekursiv umschreiben Java Basics - Anfänger-Themen 8
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
D Pentagonale Nummern in Rekursiv Java Basics - Anfänger-Themen 14
O Enum Array Rekursiv abarbeiten Java Basics - Anfänger-Themen 44
E Weg-Suche-Problem rekursiv Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
E Erste Schritte Potenz Negativ (rekursiv) Java Basics - Anfänger-Themen 2
O Rekursiv aufrufen Java Basics - Anfänger-Themen 2
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
F Iterativ in Rekursiv Java Basics - Anfänger-Themen 2
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
kilopack15 Sin(x) rekursiv lösen Java Basics - Anfänger-Themen 17
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
P Methoden Arrays.AsList kleinste Zahl ausgeben Rekursiv Java Basics - Anfänger-Themen 9
W A hoch N Rekursiv Java Basics - Anfänger-Themen 3
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
Y Rekursiv Palindrom herausfinden Java Basics - Anfänger-Themen 5
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
M String rekursiv Spiegeln mit Originalwort davor Java Basics - Anfänger-Themen 3
K Türme von Hanoi - Rekursiv. Java Basics - Anfänger-Themen 1
T MergeSort rekursiv programmieren Java Basics - Anfänger-Themen 8
M Zahlenpyramide rekursiv programmieren Java Basics - Anfänger-Themen 7
hello_autumn Potenz selber berechnen, Rekursiv. Java Basics - Anfänger-Themen 6
V Text wüerfeln-Rekursiv Java Basics - Anfänger-Themen 4
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
D Münzverteilung Möglichkeiten | Rekursiv Java Basics - Anfänger-Themen 3
R Hanoi rekursiv lösen Problem Java Basics - Anfänger-Themen 1
D Rekursiv Kombinationen ausgeben klappt nur bei einer Wiederholung Java Basics - Anfänger-Themen 4
shiroX OOP String rekursiv zurückgeben Java Basics - Anfänger-Themen 6
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
S java rekursiv iterativ hilfee :s Java Basics - Anfänger-Themen 5
E Erste Schritte Pi, rekursiv Java Basics - Anfänger-Themen 6
A Frage Methode ggt Rekursiv Java Basics - Anfänger-Themen 5
E Hanoi-Varianten rekursiv Java Basics - Anfänger-Themen 2
P Hanoi rekursiv zu iterativ umbauen Java Basics - Anfänger-Themen 20
P Mittelwert rekursiv Java Basics - Anfänger-Themen 13
E Integral Rekursiv Java Basics - Anfänger-Themen 15
M MergeSort rekursiv Java Basics - Anfänger-Themen 2
D Ziffer in Zahl Rekursiv Java Basics - Anfänger-Themen 4
B Array rekursiv untersuchen Java Basics - Anfänger-Themen 21
I Rekursiv Java Basics - Anfänger-Themen 13
C Rekursiv Zahlenfolgen berechnen mit zwei Variablen Java Basics - Anfänger-Themen 5
K Rekursiv zu Literal Java Basics - Anfänger-Themen 12
R Verzeichnisse rekursiv nach Dateiduplikaten durchsuchen Java Basics - Anfänger-Themen 5
L File Tree rekursiv Java Basics - Anfänger-Themen 10
W Binomialkoeffizient iterativ/rekursiv Java Basics - Anfänger-Themen 2
X Addition rekursiv ohne Schleife Java Basics - Anfänger-Themen 10
M Sudoku Rekursiv lösen Java Basics - Anfänger-Themen 9
E Datentypen ein java problem rekursiv loesen Java Basics - Anfänger-Themen 2
K indexOf selbst rekursiv definieren Java Basics - Anfänger-Themen 4
M Fibonacci-Linear und Rekursiv Java Basics - Anfänger-Themen 14
J Java Rekursiv vs(zu) Iterativ Hilfe Java Basics - Anfänger-Themen 3
D preOrder, inOrder, postOrder rekursiv zusammensetzen aus String Java Basics - Anfänger-Themen 1
K Binomialkoeffizient rekursiv berechnen Java Basics - Anfänger-Themen 8
J eulersche rekursiv berechnen Java Basics - Anfänger-Themen 6
J Suchbaumeigenschaft rekursiv programmieren Java Basics - Anfänger-Themen 3
T Rekursiv Vokale zählen Java Basics - Anfänger-Themen 19
G Bestimmte Ebene eines Baumes rekursiv ausgeben Java Basics - Anfänger-Themen 49
F Sortieralgorithmus von rekursiv auf iterativ? Java Basics - Anfänger-Themen 21
G Sudoku rekursiv lösen Java Basics - Anfänger-Themen 10
S Stringlänge Rekursiv ermitteln Java Basics - Anfänger-Themen 2
dognose Verzeichnis rekursiv auslesen / beschränkte Apis. Java Basics - Anfänger-Themen 6
0 a hoch b rekursiv - wie stoppen? Java Basics - Anfänger-Themen 3
T Ordnerstrucktur rekursiv auslesen Java Basics - Anfänger-Themen 9
G Rekursiv die größte Zahl eines Arrays Java Basics - Anfänger-Themen 6
G Rekursiv Array Elemente quadrieren Java Basics - Anfänger-Themen 2
N Fibo Zahlen:iterativ,rekursiv Anzahl der Additionen zählen Java Basics - Anfänger-Themen 2
P Permutationen einer Tour rekursiv Java Basics - Anfänger-Themen 4
G Baumstruktur rekursiv durchlaufen Java Basics - Anfänger-Themen 2
B Kürzesten Weg zwischen mehreren Punkten finden (rekursiv) Java Basics - Anfänger-Themen 5
L Kombinationen einer Menge rekursiv berechnen Java Basics - Anfänger-Themen 11
J BinBaum rekursiv ausgeben Java Basics - Anfänger-Themen 9
W Rekursiv Zeichen einfügen Java Basics - Anfänger-Themen 6
M Verzeichnisse rekursiv durchlaufen und dann RegEx Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben