Anzahl Quersummen bis zur Einstelligkeit

Sebaaaa

Aktives Mitglied
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);
}
 
Zuletzt bearbeitet:
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);
		}
 
Statt jedesmal die Methode wieder aufzurufen, baust du eine weitere Schleife ein welche solange läuft bis die Quersumme einstellig ist
 
Also ich schätze mal ne while Bdg.
for funktioniert nicht für int.
und if macht keinen Sinn.

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 komm einfach nicht drauf;(

Etwas eigeninitiative .... was hast du denn bisher probiert? Ein Ansatz wäre schon etwas
 
Zuletzt bearbeitet:
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:

Java:
	public static long digitSumCountUntilDigitalRoot(long n) {

Kann also alleine schon deswegen nicht funktionieren.
 
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 ...
 

Neue Themen


Zurück
Oben