# iterierte Quersumme bilden



## Rivi92 (25. Nov 2010)

Hi,
ich habe in der uni folgende Aufgaben bekommen:

Schreiben Sie ein Java-Programm, das eine naturliche Zahl auf der Kommandozeile
ubergeben bekommt, die Quersumme dieser Zahl berechnet und ausgibt.
Lassen Sie die Quersumme der Zahlen 42, 3678 und 6947859 berechnen.

2. Schreiben Sie auf Grundlage des Programms aus Aufgabenteil 1 ein Java-Programm,
das fur eine naturliche Zahl die iterierte Quersumme einer Zahl berechnet und ausgibt.
Testen Sie Ihr Programm mit den Zahlen 24, 8763 und 9587496.

Zu Aufgabe 1 habe ich auch eine gut funktionierende Lösung gefunden:

```
public class Quersumme
{
	public static void main(String[] args)
	{
		int Zahl = Integer.parseInt(args[0]);
		int Quersumme = 0;
  
		System.out.print("Die Quersumme von " + Zahl + " lautet: ");
 
		while (Zahl != 0)
		{
			Quersumme = Quersumme + Zahl % 10;

			Zahl = Zahl / 10;
 		}
	System.out.println(Quersumme);
	}
}
```

zu dem 2. Teil der Aufgabe finde ich nun leider keine funktionierende Lösung. Habe bis jetzt folgendes script geschrieben: 

```
public class iQuersumme
{
	public static void main(String[] args)
	{
		int Zahl = Integer.parseInt(args[0]);
		int Quersumme = 0;
  
		System.out.print("Die iterierte Quersumme von " + Zahl + " lautet: ");
  
		while (Zahl != 0)
		{
			Quersumme = Quersumme + Zahl % 10;

			Zahl = Zahl / 10;
 		}
		int iterierteQuersumme = 0;
		while (Quersumme > 9)
		{
			while (Quersumme != 0)
			{
				iterierteQuersumme = iterierteQuersumme + Quersumme % 10;

				Quersumme = Quersumme / 10;
			}	
		}
		Quersumme = iterierteQuersumme;
	System.out.println(iterierteQuersumme);
	}
}
```

nach kleineren Veränderungen in ab dem Teil wo die iterierteQuersumme iengeführt wird, wird entweder 0 oder nur 1 durchlauf der while-schleife ausgegeben (Bsp: iterierte Quersumme von 8763 = 24 = 6 funktioniert; iterierte Quersumme von 9587496 = 48 = 12 (=3, dies wird allerdings nicht mehr ausgegeben) funktioniert nicht.)

weiß jemand von euch wo der Fehler liegt? bin noch nicht so erfahren im Programmieren und würde mich über Hilfe freuen.

LG Rivi


----------



## XHelp (25. Nov 2010)

Auf den ersten Blick muss die Zeile 26 eine Zeile nach oben (IN die Schleife) und du musst die iterierteQuersumme am Anfang der Schleife auf 0 setzen.

P.S. Variablen fangen mit einem Kleinbuchstaben an, Klassen mit Großbuchstaben.


----------



## Rivi92 (25. Nov 2010)

Dann wird (nach langer berechnung) -2147483647 ausgegeben. --> überlauf?


----------



## XHelp (25. Nov 2010)

Siehe mein Edit


----------



## Rivi92 (25. Nov 2010)

auch das ändert am Problem leider nichts...
gibt immernoch diesen negativbetrag aus


----------



## XHelp (25. Nov 2010)

Bei mir schon. Was hast du jetzt nach den ganzen Änderungen stehen?


----------



## Rivi92 (25. Nov 2010)

```
public class IQuersumme
{
	public static void main(String[] args)
	{
		int zahl = Integer.parseInt(args[0]);
		int quersumme = 0;
  
		System.out.print("Die iterierte Quersumme von " + zahl + " lautet: ");
  
		while (zahl != 0)
		{
			quersumme = quersumme + zahl % 10;

			zahl = zahl / 10;
 		}
		int iterierteQuersumme = 0;
		while (quersumme > 9)
		{
			while (quersumme != 0)
			{
				iterierteQuersumme = iterierteQuersumme + quersumme % 10;

				quersumme = quersumme / 10;
			}
		quersumme = iterierteQuersumme;			
		}
	System.out.println(iterierteQuersumme);
	}
}
```


----------



## XHelp (25. Nov 2010)

Mit "siehe mein Edit" meinte ich:


XHelp hat gesagt.:


> ... und du musst die iterierteQuersumme am Anfang der Schleife auf 0 setzen.


----------



## Rivi92 (25. Nov 2010)

Ah okay, ich dachte das Bezog sich auf das Groß-/Kleinschreiben der Variablen und Klassen.
Jetzt gehts soweit. das is schonmal sehr gut! nur habe ich es grade auch mal mit der Zahl 24 (wie in der aufgabe gefordert) getest und es kam 0 raus (ebenso wie bei 16, mit der ich es auch einfach mal getestet hab). woran könnte das jetzt liegen? eigentlich dürften zahlen deren Quersumme auch ohne die iterierung gebildet werden garnicht in die 2. while schleife gelangen.


----------



## XHelp (25. Nov 2010)

Weil du dein Code doppelt schreibst.
Zuerst berechnest du die Quersumme, dann berechnest du nochmal die Quersumme in der Schleife.
Bei Zahlen, wo die Quersumme=iterierte Quersumme ist, springt er gar nicht in die Schleife, so dass iterierteQuersumme immer 0 bleibt. Gib also nicht die iterierteQuersumme, sondern 
	
	
	
	





```
quersumme
```
 aus


----------



## Rivi92 (25. Nov 2010)

Sauba, es geht! Vielen Dank für die schnellen und sehr guten Antworten!


----------



## XHelp (25. Nov 2010)

Optional lässt sich das ganze auch rekursiv berechnen:

```
public static int quersumme(int x) {
	if (x<10) {
		return x;
	}
	return x%10+quersumme(x/10);
}
public static int iterierteQuersumme(int x) {
	if (x<10) {
		return x;
	}
	return iterierteQuersumme(quersumme(x));
}
```


----------



## Rivi92 (25. Nov 2010)

Jo cool, danke, aber ich glaube ich bleibe erstmal bei meinem script, muss das nämlich in nem testat erklären und da is es denk ich mal schon besser, wenn ich weiß warum ich was gemacht hab


----------



## Kwabena12 (10. Mai 2020)

Rivi92 hat gesagt.:


> Hi,
> ich habe in der uni folgende Aufgaben bekommen:
> 
> Schreiben Sie ein Java-Programm, das eine naturliche Zahl auf der Kommandozeile
> ...




Moin , wie ich sehe hatten sie die gleiche Aufgabe wie ich.
Könnten sie mir den Vorgang zu Aufgabe 1 ``Quersumme```erklären, wenn man zum Beispiel die Zahl 22 einsetzt?
oder vielleicht irgendjemand aus dem Forum`?


----------



## MoxxiManagarm (10. Mai 2020)

Das Thema ist *10 Jahre* alt


----------



## Kwabena12 (10. Mai 2020)

Ich weiß, dass das Thema 10 Jahre alt ist, aber ich habe genau die gleiche Aufgabe gestellt bekommen und ich wollte die iterierte Summe mit den Ansatz von Rivi92 berechnen


----------



## MoxxiManagarm (10. Mai 2020)

Ich wollte damit nur sagen, ich würde keine großen Hoffnungen rein stecken, dass er dir nach 10 Jahren noch antwortet. Zudem war er seit 9 Jahren nicht mehr online.


----------



## mihe7 (10. Mai 2020)

Kwabena12 hat gesagt.:


> Ich weiß, dass das Thema 10 Jahre alt ist, aber ich habe genau die gleiche Aufgabe gestellt bekommen und ich wollte die iterierte Summe mit den Ansatz von Rivi92 berechnen


In dem Fall wäre es besser, einen neuen Thread zu eröffnen und auf den Thread hier zu verlinken.



Kwabena12 hat gesagt.:


> Könnten sie mir den Vorgang zu Aufgabe 1 ``Quersumme```erklären, wenn man zum Beispiel die Zahl 22 einsetzt?
> oder vielleicht irgendjemand aus dem Forum`?


Naja, % ist der Remainder-Operator und / die ganzzahlige Division. Wenn Du eine Zahl % 10 rechnest, erhältst Du die letzte Stelle, z. B. 123 % 10 == 3. Dividierst Du die Zahl durch 10, bleibt nur die Ganzzahl übrig: 123 / 10 = 12.


```
z := 123
s := 0
s := s + z % 10 = s + 3 = 3
z := z / 10 = 123 / 10 = 12
z == 0 ? Nein, also nochmal
s := s + z % 10 = s + 2 = 3 + 2 = 5
z := z / 10 = 12 / 10 = 1
z == 0? Nein, also nochmal
s := s + z % 10 = s + 1 = 5 + 1 = 6
z := z / 10 = 1 / 10 = 0
z == 0? Ja, also fertig. s = 6 ist die Quersumme von 123.
```


----------



## Kwabena12 (12. Mai 2020)

Danke!


----------

