eine Zeichenfolge rekursiv verkehrt ausgeben

  • Themenstarter Themenstarter Han
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
H

Han

Gast
Hallo..mach zur Übung ein Programm welches eine Zeichenfolge einlesen soll und dann rekursiv wieder ausgeben soll,ohne es in einem Array zwischenzuspeichern....aber ich komm einfach nicht weiter....hier mein Code:
IO.write() gibt Text am Bildschirm aus
a.charAt(i) behandelt ein Zeichen an der Stelle i im String a
IO.readLine() liest einen Text ein

Code:
public class spiegelnEinerZeichenfolge{
        
        static boolean spiegel(String a,int i){
                
            int l = a.length() - 1;

                if(i == l||spiegel(a,i++)){
                     IO.write(a.charAt(i));//z.b. bei String a = "Han" ist a.charAt(2) = n
                         return true;
                }
            
        return false;        
        }
        
          
        public static void main(String[] args){
            
        IO.write("Geben Sie ein beliebiges Wort ein: ");
        String text = IO.readLine();
   
        spiegel(text,0);
        //Textlänge: z.b. Hannes -> 6
                        
        }        
}

Was mache ich falsch? [Antwort von Beni: du benutzt keine Codetags...]
JAVA zeigt mir einen Stackoverflow an....

mfg,
Hannes
 
Kannst du mir genau die Stichwörter für die Suche geben denn ich kann nichts finden.....
 
Ersetz mal bei deiner Lösung das i++ durch (i+1). (mit Klammern!)
Kann dir nicht wirklich erklären warum, StackOverflow heisst jedoch soviel, dass du eine Endlosrekursion hast.
Und siehe da, bei i++ bleibt i wohl immer 0, wär toll wenn jemand sagen könnte warum.
Es muss wohl daran liegen dass dieses Inkrement anders kompiliert wird als man glaubt, aber ich hab wirklich keine Ahnung 🙂
edit: Ach ja: ++i klappt, liefert aber seltsame Ergebnisse (falsche Reinfolge)
 
logisch gesehen würde ich auch von hinten anfangen zu zählen (du willst ja wenn ich richtig verstanden haben das Wort umgedreht ausgeben).

d.h. als Start position würde ich die Länge des Strings nehmen (bzw length-1). das jeweilige char ausgeben und dann die Methode erneut aufrufen mit einer verringerten pos....
 
rekursiv ist doch anders
Code:
spiegel(wort){
   wenn länge von wort = 0 dann return
   sonst
      drucke letztes zeichen
      spiegel(wortohneletzteszeichen)
}
 
@Chase: Es gibt da wirklich einen Unterschied. Es gibt zwei Inkrementschreibweisen. Einmal i++ und dann ++i. Der Unterschied ist leicht erklärt:

i++ gibt zuerst i zurück und inkrementiert es anschließend.
++i inkrementiert zuerst i und gibt dann das Ergebnis zurück.

Wenn man also in einer Schleife spiegel(a, i++) aufruft, wird tatsächlich immer 0 übergeben und dann inkrementiert. Theoretisch müßte obiges Programm also mit spiegel(a, ++i) funktionieren.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben