Java Rekursiv 2 Strings vergleichen

Diskutiere Java Rekursiv 2 Strings vergleichen im Programmierung Forum im Bereich Software Forum; 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...

hacklschorsch

Threadstarter
Dabei seit
09.03.2004
Beiträge
1.177
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.
 

DerZong

Dabei seit
12.10.2004
Beiträge
4.703
Alter
43
Da ich davon ausgehe, dass nicht die Funktion String.equal(String) verwendet werden soll, musst du mehrere Dinge prüfen:

  • Zu erst überprüfen, ob die Länge der Strings gleich ist ( String.length() ) - wenn ungleich, dann muss er ja sowieso nicht weiter machen :hehe
  • Dann nacheinander jedes einzelne Zeichen der Reihe nach vergleichen ( String.charAt(Stelle) ) - im Prinzip egal, wo du dabei anfängst - nur zweckmäßig nicht irgend wo in der Mitte :hehe
  • Sind diese gleich, so die Methode wieder aufrufen - diesmal aber den String abzüglich der schon geprüften Stelle ( String.substring(Beginn, Ende) )
  • Jeweilige Abbruchbedingungen sollten sein, dass keine Stelle des Ursprungsstrings mehr über ist, die verglichenen Stellen unterschiedlich sind, oder aber, dass die Strings eine unterschiedliche Länge haben.
 

hacklschorsch

Threadstarter
Dabei seit
09.03.2004
Beiträge
1.177
hab so was im Kopf

Code:
boolean recfunction(String s1, String s2){
// hier prüfen ob länge gleich ist

  if(s1.charAt(1)==s2.charAt(1)){
         recfunction(s1.substring(1), s2.substring(1))
         return true
   }

Teste später mal
 

hacklschorsch

Threadstarter
Dabei seit
09.03.2004
Beiträge
1.177
PHP:
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);
		
		
	}
}

Bis auf das, das mir immer eine StringIndexOutOfBoundsException ( if(s1.length()!=0 || s2.length() != 0) )wirft. So sollte es doch aussehen oder???
 

DerZong

Dabei seit
12.10.2004
Beiträge
4.703
Alter
43
Denke mal, die IndexOutOfBoundsException bekommst du, da die Rekursion auch dann noch ausgeführt werden soll, wenn im String eigentlich keine Zeichen mehr drin sein können. Solltest also noch vor dem rekursiven Aufruf prüfen, ob der String noch mindestens 1 Zeichen lang ist ;)
 

hacklschorsch

Threadstarter
Dabei seit
09.03.2004
Beiträge
1.177
Alles klar. aber die rekursion stimmt so, oder?
 

DerZong

Dabei seit
12.10.2004
Beiträge
4.703
Alter
43
Denke, dass es so funktionieren sollte, habs selber auch nochmal nachgebaut, und läuft (nagel mich aber nicht drauf fest, wenn der Code nicht optimal ist/abläuft :hehe)
PHP:
public class Rekursion { 
static int x = 0; 
    static boolean recCompare(String s1, String s2) { 
         
        //System.out.println(s1+s2); 
        x++; 
         
        if(s1.length() != s2.length()) 
            return false; 
        if(s1.length()==0 && s2.length()==0)
        	return true;
         
        while (s1.length()>0 && s2.length()>0 && s1.charAt(0)==s2.charAt(0)){ 
             
            if(s1.length()!=0 || s2.length() != 0) 
                //System.out.println(s1+s2);         
            if (s1.length() != 0 && s2.length() != 0)
            	return recCompare(s1.substring(1), s2.substring(1));
        } 
                 
        return false; 
         
    } 
     
    public static void main (String[] args) { 
     
        String s1 = "Hallohallöle"; 
        String s2 = "Hallohallöle"; 
        boolean vergleich = recCompare(s1,s2) ; 
        System.out.println("Vergleich zweier Strings");
        System.out.println("String 1:\t" + s1);
        System.out.println("String 2:\t" + s2);
        System.out.println("Ausgang des Vergleichs: "+vergleich);
        System.out.println("Durchläufe: " + x);
    } 
}
 

hacklschorsch

Threadstarter
Dabei seit
09.03.2004
Beiträge
1.177
In einer der Letzten Klausuren war mal eine Rekursion daran die so ausgesehen hat. ( soweit ich mich erinnern kann )

rek(Rational a, Rational b)

Man sollte vergleichen ob beide gleich sind. Mehr stand da nicht.

Weis jemand noch andere gute Rekursionsaugaben.
Fibunacci, Hanoi, Sum sind kein Problem!
 
Thema:

Java Rekursiv 2 Strings vergleichen

Java Rekursiv 2 Strings vergleichen - Ähnliche Themen

Das Internet der Zukunft - Was uns in Kürze und in einigen Jahren erwartet: Das Internet entwickelt sich rapide weiter. Entwickler und enthusiastische Visionäre arbeiten an den Strukturen des Webs und an Veränderungen der...
Im Anfang war der Sputnik-Schock – Eine kurze Geschichte des Internets vom APRANET bis Web 4.0: Wir leben in einem digitalen Zeitalter. Große Teile unser Arbeits- und Privatwelt finden dort statt und werden teilweise sogar hineingetragen. In...
Wie man/frau ein (Batch-)Programm schreibt: Hi Die Systemfunktionen des Kommandointerpreters sind hilfreich und nuetzlich fuer alle moeglichen Aufgaben, aber leider schlecht bis gar nicht...
Der Dau V 2.10: 1994 (Duemmster Anzunehmender User) Also der Cousin eines Freundes arbeitet wirklich in der Serviceabteilung bei Nixdorf...
Wassergekühlte Netzteile || Leises Netzteil: Vor garnicht allzulanger Zeit hatten wir ein Topic Namens: Lüfterlose || Leise Netzteile. Dieser Topic war schon recht interessant, wenn man Wert...
Oben