Datentypen String aus Ziffern erhöhen und als String zurückgeben

c0rnfl4k3s

Mitglied
Hi zusammen,
ich schreib am Montag eine Klausur und hab hier Schwierigkeiten bei einer Aufgabe. Ich fasse mich mal möglichst kurz: Mein Problem ist die Umwandlung von char zu int, weil bei der addition von int + charAt() ja die ascii-nummer wiedergegeben wird und nicht die eigentliche char-ziffer. Hier die Aufgabe:

b) Implementieren Sie die Methode public static String erhoeheUm2(String a)
Diese Methode erhöht die in Form eines Strings übergebene Dezimalzahl a um den Wert 2 und gibt das Ergebnis wieder in Form eines Strings zurück. Sie können dabei voraussetzen, dass in a nur Ziffern ('0' … '9') vorkommen. Beispiel: Die Rückgabe für erhoeheUm2("15")ist "17", die Rückgabe für erhoeheUm2("998")ist "1000".
Hinweis: Sie dürfen wiederum die Methoden length() und charAt(int index)aus der
Klasse String verwenden. Sie können zusätzlich die Methode spiegeln(String w)
aus Aufgabenteil a) nutzen. Die Nutzung weiterer Methoden ist nicht erlaubt.

meine spiegeln-Methode (zum Umkehren der Reihenfolge, glaube aber nicht dass die überhaupt gebraucht wird) :
Java:
public static String spiegeln(String w){
        String ret = "";
        for(int i = w.length()-1; i >= 0; i--)
            ret += w.charAt(i);
        return ret;
    }

Ist meine Idee mit dem umwandeln von charAt() denn überhaupt richtig, oder braucht man das gar nicht zu machen?
Alle Ratschläge sind willkommen 🙂
Danke im Voraus!

P.S.:
Ich hab in der Klausur keine Unicode Tabelle oder so, also einfach charAt() -48 zählt nicht 😀
 
Zuletzt bearbeitet:
Die Klausur hatten wir in dem Forum schon mal und ich hab auch schon mal die Lösung gepostet (finde den Thread gerade nicht, aber den Code hab ich noch):
Java:
public static String erhoeheUm2(String a) {
  StringBuilder builder = new StringBuilder(a.length());
  int offset = 2;
  for (int i = a.length() - 1; i >= 0; i--) {
    int c = a.charAt(i) - '0' + offset;
    builder.append(c % 10);
    offset = c / 10;
  }
  if (offset != 0) {
    builder.append(offset);
  }
  return spiegeln(builder.toString());
}

public static String spiegeln(String w) {
  StringBuilder builder = new StringBuilder(w.length());
  for (int i = w.length() - 1; i >= 0; i--) {
    builder.append(w.charAt(i));
  }
  return builder.toString();
}
 
Die Klausur hatten wir in dem Forum schon mal und ich hab auch schon mal die Lösung gepostet (finde den Thread gerade nicht, aber den Code hab ich noch):
Danke, aber ist die to-String methode laut aufgabenstellung nicht auch verboten? Ebenso verwirrt mich der Zugriff auf die Klasse StringBuilder. Sowas wurde noch nie in den VLs erwähnt.
Und aus der wird ja dann auch noch eine verbotene Methode aufgerufen. Ist das mit solchen eingeschränkten Mitteln überhaupt möglich ? 😵
 
Ersetz doch den StringBuilder mit simplen Stringkonkatenationen: "a" + "b";

Kurze Theorie:
Bei Stringkonkatenationen werden immer neue String Objekte gebaut (eventuell auch in den Stringpool geworfen werden) die aber gar nicht gebraucht werden. StringBuilder baut dir einen String und mit der toString-Methode erzeugst du zum Schluss noch dein einziges String Objekt. Also kann man sagen, dass der StringBuilder effizienter arbeitet als der +-Operator.
 
Das Programm von Flown funktioniert auch, wenn man die "spiegeln"-Methode so lässt.
Java:
	public static String spiegeln(String w) {
		String ret = "";
		for (int i = w.length() - 1; i >= 0; i--)
			ret += w.charAt(i);
		return ret;
	}
 
was genau macht denn builder.append(c % 10)?
ich darf ja wirklich gar keine methoden verwenden außer charAt(), length() und spiegeln(). also muss ich das alles selber schreiben :/
 
Wow so wenig Eigeninitiative - viel Glück bei der Klausur:
Java:
public static String erhoeheUm2(String a) {
  String result = "";
  int offset = 2;
  for (int i = a.length() - 1; i >= 0; i--) {
    int c = a.charAt(i) - '0' + offset;
    result += c % 10;
    offset = c / 10;
  }
  if (offset != 0) {
    result += offset;
  }
  return spiegeln(result);
}
@krgewb spiegeln Implementierungen sind äquivalent (nur meine ohne unnötigen garbage).
 
Das Prozentzeichen repräsentiert den Modulo-Operator.
Beispiel:
22 % 5 ergibt 2
bzw.
22 mod 5 = 2

In der Schule schreiben es die Kinder so:
22 / 5 = 4 Rest 2
 
Leute danke für die hilfe aber ich kann den mathematischen algorithmus hinter dem code einfach nicht nachvollziehen und ich wäre da auch niemals drauf gekommen. ich bete einfach dass so eine aufgabe nicht dran kommt 😀
 
Leute danke für die hilfe aber ich kann den mathematischen algorithmus hinter dem code einfach nicht nachvollziehen und ich wäre da auch niemals drauf gekommen. ich bete einfach dass so eine aufgabe nicht dran kommt 😀
Die Regel, dass man keine Funktionen verwenden darf ist auch doof. Im echten Leben würde man einen String einfach in Integer umwandeln:
Java:
String zahlAlsString = "154";
int i = Integer.parseInt(zahlAlsString);
 

Neue Themen


Zurück
Oben