Java Quersumme berechner (für anfänger->einfach)
Hallo, ich haber die Aufgabe, wie schon in der "Frage" erwähnt ein Programm zu schreiben das die Quersumme einer Zahl berechnet. Habe einen Quellcode gefunden der mir simpel erscheint, aber doch verstehe ich ihn nicht ganz. Hoffe ihr könnt mir ein paar Sachen erklären. Den Input-Reader habe ich durch eine einfache Variable ersetzt, das der Code nicht so überdimensional wird.
package quersummen;
public class Quersummen {
public static void main(String[] args) {
int zahl = 1232423;
int quersumme = 0;
while (zahl > 0) {
quersumme = zahl % 10;
zahl = zahl / 10;
}
System.out.println("Quersumme: " + quersumme);
}
}
4 Antworten
public static void main(String[] args) {
die Zahl ist 1232423;
Die Quersumme ist zunächst 0;
solange(die Zahl größer 0 ist) {
addiere zur "quersumme"-Variable die Ziffer die ganz rechts in der Zahl ist;
teile die Zahl durch 10 (dadurch rutscht die letzte Ziffer hinter das Komma und fällt weg beim Zuweisen, weil du sie in ein int speicherst die keine Kommazahlen speichern kann);
}
Gib aus("Quersumme: " + quersumme);
}
Dass da ein += hin muss hast du ja schon bemerkt :-)
Also einmal zur Erklärung, was hier passiert (wobei ich das Gefühl habe, dass hier ein Fehler drin ist), gehen wir mal von der zahl 1234 aus.
Es wird der Modulo 10 der Zahl genommen, das verstehe ich noch. Das heißt es kommt 4 heraus, denn 1234/10=123, Rest 4.
Eine Zahl, die als Int wird immer als ganze Zahl ausgegeben, alles hinter einem Komma wird weggelassen (bei manchen Sprachen gibts dann auch einen Fehler).
Also 1234/10 wäre eigentlich 123,4. Da aber der Typ der Zahl Int ist, wird nur 123 ausgegeben. Soweit auch klar.
Aber müsste es denn nicht statt
quersumme = zahl % 10;
so lauten:
quersumme += zahl % 10;
Denn schließlich wird doch sonst die Quersumme bei jedem Durchlauf überschrieben oder nicht? Beispiel: Quersumme 1234 ist 10 (also 1+2+3+4).
In der Schleife wird aber die quersumme erst auf 4 gesetzt, dann auf 3, dann auf 2, dann auf 1. Oder bin ich grad blöd? Ich bin zwar kein Java-Kenner, aber Zuweisungsoperationen gibts doch auch in Java, oder? Und ich kann mir nicht vorstellen, dass ein "=" addiert.
Ja sry das habe ich vergessen wieder dazu du machen...das habe ich im code bei mir weg gelassen um zu schauen was passiert ;D aber trz danke.... HILFREICHSTE ANTWORT!
Ja, "+=" fehlt oder halt "quersumme = quersumme + (zahl % 10);"
Hat er vermutlich rauseditiert :-)
Du könntest bei negativen Zahlen Probleme bekommen, da das Teilen einer Integer-Variablen m. Erinnerung nach immer die nächste, kleinere Zahl wiedergibt (z. B. -3.4 → -4). Das solltest du in jedem Fall ausprobieren.
(Dass es quersumme += heißen müsste, hat dir Broco schon gesagt.)
- weiß du was "%" ist?
- Weißt du was rauskommt wenn man 10,5 in int speichert?