Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hab ein kleines Problem.
Ich soll ein kleines Programm schreiben welches die Quersumme einer beliebigen Zahl berechnet und dazu noch zählt wie oft die Quersumme berechnet wurde bis die Zahl <= 10 ist.
Also die Wiederholungen bis zur Einstelligkeit.
ich hab schon einen Teil geschrieben:
Java:
public class DigitSum {
public static long digitSumCountUntilDigitalRoot(long n) {
if(n<=10){ return 1 ;}
long Quersumme = 0;
int counter =0;
while (n != 0) {
Quersumme = Quersumme + n % 10;
n = n / 10;
counter ++;
}
return counter ;
}
Das funktioniert nur die Beispiele 10 28 55 99 199
Aber sobald die Zahl 4-stellig (oder mehr)wird klappts nicht mehr :/
Sieht vll jemand meinen Fehler oder muss ich das Ganze ganz anders anpacken?
Hmm vielleicht kannst du ja die Zahl mit String.parseString(anotherString / oder deine Zahl halt) umwandeln.
Dann könntest du mit string.lenght die Länge des Stringes herausfinden und dann ein Charakter - Array erstellen , welches dir dann den String aufteilt. und dann Kannst du mithilfe von Integer.parseInt(Der Charakter) die Zahlen in einer While Schleife zusammen rechen und erhälst die Quersumme
Die Quersumme ist ja nur Nebensache und wird am Ende nirgendwo angezeigt.
Es soll nur der Counter zurückgegeben werden welcher die Anzahl Wiederholungen bis zur Einstelligkeit beinhaltet.
Java:
@Test
public void test199() throws Exception {
assertEquals(3, DigitSum.digitSumCountUntilDigitalRoot(199));
}
@Test
public void test4789() throws Exception {
assertEquals(3, DigitSum.digitSumCountUntilDigitalRoot(4789));
}
Das wären jetz 2 Beispiele eines JUnit Tests dieser Aufgabe
Der erste funktioniert aber der 2te nicht mehr.
Ich verstehe dein Problem nicht ganz du willst die Anzahl der wiederholungen ausrechen die Operation benötigt bis die Quersumme errechnet ist oder wie?
Du sollst die Quersumme einer Zahl berechnen und von dieser Quersumme wiederrum die Quersumme, bis du auf einen Wert < 10 (einstellig) bist?
Willst du als Ergebnis dann die Quersumme oder die Anzahl wie oft diese berechnet werden musste? (Hier würde es auf den genauen Wortlaut der Aufgabenstellung ankommen)
Aber ich denke, du sollst bei dieser Aufgabe auf Rekursion zurückgreifen.
Java:
public static long digitSumCountUntilDigitalRoot(long n) {
long quersumme = 0;
while (n != 0) {
quersumme = quersumme + n % 10;
n = n / 10;
}
if(quersumme < 10) {
return 1;
}
return 1 + digitSumCountUntilDigitalRoot(quersumme);
}
Kann mir jmd. kurz sagen wie ich folgende rekursive Lösung als iterative Lösung schreiben kann?
Java:
public class DigitSum {
public static long digitSumCountUntilDigitalRoot(long n) {
long quersumme = 0;
while (n != 0) {
quersumme = quersumme + n % 10;
n = n / 10;
}
if(quersumme < 10) {
return 1;
}
return 1 + digitSumCountUntilDigitalRoot(quersumme);
}
Hinweis: Jede while-Schleife lässt sich auch als for-Schleife schreibe und umgekehrt
Du brauchst eine äußere Schleife die kontrolliert ob die Quersumme einstellig ist, wenn nicht dann musst du die Quersumme berechnen, für jede Berechnung erhöhst du einen counter.
Diese counter gibst du zurück sobald die quersumme einstellig wird
Ich soll ein kleines Programm schreiben welches die Quersumme einer beliebigen Zahl berechnet und dazu noch zählt wie oft die Quersumme berechnet wurde bis die Zahl <= 10 ist.
Das hört sich so an als ob deine Funktion zwei Rückgabewerte liefern soll, also in Java ein Objekt mit zwei Member-Variablen. Deine Funktion liefert aber nur einen long zurück:
Das hört sich so an als ob deine Funktion zwei Rückgabewerte liefern soll, also in Java ein Objekt mit zwei Member-Variablen. Deine Funktion liefert aber nur einen long zurück:
Kann also alleine schon deswegen nicht funktionieren.
Die Aufgabenstellung war schlecht beschrieben!
Das Problem ist schon gelöst, eine entsprechende Lösung mit Rekursion gibt es.
Aktuell arbeitet der TO an einer imperativen Lösung ...