Wie bekomme ich das Zeichen 'digit' an vorderster Stelle

Diskutiere Wie bekomme ich das Zeichen 'digit' an vorderster Stelle im Allgemeine Java-Themen Bereich.
R

Reykja

Aufgabenstellung: die Methode verschiebt eine Ziffer innerhalb des Strings text an vorderster Stelle. Es geht wieder um Rekursion weshalb keine Schleifen verwendet werden dürfen.
zB
shiftDigitLeft("zm7na") liefert "7zmna"

Java:
  private static String shiftDigitLeft(String text) {
        if (text.isEmpty()) {
            return text;
        }
        char digit = text.charAt(0);
        if (digit >= '0' && digit <= '9') {
            return shiftDigitLeft(text.substring(1)) + digit;
        } else {
            return text.charAt(0) + shiftDigitLeft(text.substring(1));
        }
    }
 public static void main(String[] args) {
     System.out.println(shiftDigitLeft("zm7na"));
     System.out.println(shiftDigitLeft("ohneziffer"));
     assert (shiftDigitLeft("zm7na").equals("7zmna"));
     assert (shiftDigitLeft("ohneziffer").equals("ohneziffer"));
Bei mir wird allerdings die Ziffer an letzter Stelle ausgegeben. Ich hab dieses Mal leider gar keine Idee was ich machen könnte..
 
J

JustNobody

Dann beschreibe doch bitte einfach einmal den Algorithmus in eigenen Worten und das möglichst detailiert.
Oder spiel den Algorithmus mit Stift und Papier einmal im Detail durch.

Wie musst du vorgehen, wenn du Zeichen am Anfang und nicht am Ende haben willst? Sobald Du es aktiv durchspielst, solltest Du die Problematik erkennen und lösen können.
 
H

httpdigest

Ist im Prinzip dasselbe wie die vorherige Aufgabe, nur musst du den Text jetzt nicht von links nach rechts rekursiv "zerschneiden"/verarbeiten, sondern von rechts nach links, so dass du bei jedem Rekursionsschritt in der Lage bist, eine im "aktuellen" String hinten gefundene Ziffer sofort nach vorne zu schieben.
 
MoxxiManagarm

MoxxiManagarm

Du solltest es dir vielleicht mal aufmalen was passiert. In deinem Fall musst nu nämlich den Shifted Substring betrachten.
Also:
Das erste Zeichen wegnehmen (speichern) und den Rest rekursiv bearbeiten. Der shifted Rest hat die Zahl an vorderster Stelle. Du hast also dann dein Zeichen (im ersten Rekursionsschritt ist es bei dir 'z') und den shifted Rest ("7mna"). Dann führst du diese beiden Hälften zusammen, so dass die 7 dann vorne steht.
 
R

Reykja

Java:
 private static String shiftDigitLeft(String text) {
        if (text.length()<2)
            return text;

        String s = shiftDigitLeft(text.substring(1));
        char digit = s.charAt(0);
        if (digit >= '0' && digit <= '9') {
            return digit + "" + text.charAt(0) + s.substring(1);
        } else
            return text;
    }
Ich weiß zwar nicht ob's noch besser geht, hab's aber schlussendlich so gelöst.
Danke für eure Hilfe!
 
Thema: 

Wie bekomme ich das Zeichen 'digit' an vorderster Stelle

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben