Quersummenberechnung

quill

Mitglied
Hallo,

bin zum ersten Mal hier.

Ich habe eine Aufgabe, wo ich stecken geblieben bin und wäre auf eure Einsicht und Hilfe sehr dankbar. Jedenfalls lautet die Aufgabe so:

Wenn ein Integer durch 10 geteilt wird, dann verschiebt sich das Komma um eine Stelle nach vorne und die Nachkommastelle wird abgeschnitten.

1. Vervollständige die Methode crossSum, die die Quersumme einer positiven ganzen Zahl berechnet.

2. In der main-Methode muss ich diese Befehle im Programm schreiben:

a. Definiere eine Variable x und weise ihr den Wert 80611 zu
b. Berechne die Quersumme von x.
c. Falls die Quersumme größer als 2 ist, teile sie durch 2 und setze das Ergebnis als neues x.
d. Wiederhole b und c, bis die Quersumme nicht größer als 2 ist.
e. Gib die endgültige Quersumme aus.

Hinweis: Nur die ??? müssen ersetzt werden.

Jedenfalls bin ich mit meinem Programm so weit gekommen:

Java:
public class QuersummeBerechnung {
 
 
    // Methode zur Berechnung der Quersumme einer positiven ganzen Zahl
    public static ??? crossSum(??? zahl) {
        int quersumme = 0;
         while (zahl > 0) {
             quersumme += zahl % 10;
             zahl /= 10;
         }
         return ???;
     }
 
     public static void main(String[] args) {
         // a. -d.
 
         // e. Gib die endgültige Quersumme aus.
         System.out.println("Endgültige Quersumme: " + );
     }
 
}

Ich bitte um Eure Hilfe und Einsicht. Vielen Dank.
 

KonradN

Super-Moderator
Mitarbeiter
Die Fragezeichen gehören ja zu dieser Fragestellung:
Vervollständige die Methode crossSum, die die Quersumme einer positiven ganzen Zahl berechnet.
Also geht es um eine Methode crossSum. Wie ist eine Methode aufgebaut? Was gehört an die Stellen der Fragezeichen? Was kann da also Sinn machen?

Hinweis: Nur die ??? müssen ersetzt werden.
Das bezieht sich aber nur auf die erste Fragestellung. Die zweite Fragestellung betrifft ja die main Methode und da sind keine ??? zu ersetzen.
Aber was zu tun ist, ist eigentlich auch komplett gegeben. Und bei jedem Punkt kann man nur Fragen: Ja, wie macht man das denn in Java? Sprich beim ersten Punk: Wie definiert man eine Variable und weist Ihr dann einen Wert zu?

Ihr werden im Unterricht bestimmt irgendwelche Lehrmaterialien haben. Sollte es daran scheitern: Schau ob Du kurzfristig an das Buch "Java von Kopf bis Fuss" kommen kannst. Bis dahin kannst Du im Internet nach Java Einführungen schauen oder Java ist auch eine Insel als Nachschlagewerk nutzen.
 

quill

Mitglied
Die Methode "crossSum" braucht einen Datentyp, der eine positive ganze Zahl ausgibt. Das wäre doch hier der Datentyp "int". Also muss in den Fragezeichen int eingesetzt werden. Am Ende der Methode kommt noch "return quersumme;"
 

quill

Mitglied
In der main-Methode kommt:

Java:
{
    int x = 80611;
    while (0 != quersumme) {
            x = x + 1;
            quersumme = quersumme / 10;
        }
}
 

KonradN

Super-Moderator
Mitarbeiter
Die Methode "crossSum" braucht einen Datentyp, der eine positive ganze Zahl ausgibt. Das wäre doch hier der Datentyp "int". Also muss in den Fragezeichen int eingesetzt werden. Am Ende der Methode kommt noch "return quersumme;"
Das hört sich doch sehr gut an. Damit hast Du den ersten Teil der Aufgabe doch schon erledigt. Dann kannst Du Dich um den zweiten Teil kümmern.

Und ein Tipp, den ich in der ersten Antwort vergessen habe: Du kannst den Code auch in einer Entwicklungsumgebung ausprobieren. Also z.B. in IntelliJ oder so.
 

quill

Mitglied
In der main-Methode kommt:

Java:
{
    int x = 80611;
    while (0 != quersumme) {
            x = x + 1;
            quersumme = quersumme / 10;
        }
}
 

KonradN

Super-Moderator
Mitarbeiter
In der main-Methode kommt:

Java:
{
    int x = 80611;
    while (0 != quersumme) {
            x = x + 1;
            quersumme = quersumme / 10;
        }
}
Das solltest Du noch einmal Punkt für Punkt durchgehen. Die Punkte a. - e. solltest Du einzeln abhaken. Der Punkt a. ist korrekt, aber b sehe ich z.B. nirgends. Wie berechnest Du denn die Quersumme (mit Hilfe der Methode)?
 

quill

Mitglied
Java:
{
    int x = 80611;
    quersumme = 8+0+6+1+1;
    if(quersumme > 2){
        quersumme/2 = x;
        return x;
    }
    else {
        System.out.println("Endgültige Quersumme: " + );
    }
}
 

Jw456

Top Contributor
Schaue dir doch nochmal diesen Satz von Konrad an.
Wie berechnest Du denn die Quersumme (mit Hilfe der Methode)?

Wozu ist die Methode gut?
Was macht sie?
Wie kannst du sie nutzen?
Sind Fragen die du dir stellen soltest.
 

quill

Mitglied
Schreibe ich für c also:

Java:
    if(quersumme > 2){
        quersumme/2 = x;
        return x;
    }
    else {
        System.out.println("Endgültige Quersumme: " + );
    }
?
 

mihe7

Top Contributor
Links steht die Variable, der du etwas zuweisen möchtest, rechts der Ausdruck, dessen Ergebnis du der Variablen zuweisen möchtest.

Du versuchst aktuell einer Berechnung etwas zuzuweisen, das funktioniert nicht.
 

mihe7

Top Contributor
Nein. Bislang hast Du

Java:
// Schritt a
int x = 80611;
// Schritt b
x = crossSum(x);
// Schritt c
if (x > 2) {
    x = x / 2;
}

Du sollst nun die Schritte b und c so lange wiederholen, bis die Quersumme nicht mehr größer als 2 ist.

EDIT:

Noch ein Hinweis (über den bin ich eben selbst gestolpert, weil ich nicht genau gelesen hatte): die Quersumme und x sind ggf. unterschiedliche "Dinge". D. h. die Schritte b und c sind noch etwas abzuändern.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
In Schritt b steht zwar, dass Du die Quersumme von x berechnen sollst und natürlich musst Du das Ergebnis in einer Variablen speichern, um später darauf zugreifen zu können, allerdings steht da nichts davon, dass Du x überschreiben sollst. Ich würde also erst einmal schreiben:
Java:
int x = 80611;
int quersumme = crossSum(x);
if (quersumme > 2) {
    x = quersumme / 2;
}
Und jetzt sollst Du die Schritte b und c (also alles ab Zeile 2) wiederholen, bis die quersumme nicht mehr größer als 2 ist.

Die while-Schleife war schon keine schlechte Idee, allerdings prüft diese, ob die Bedingung erfüllt ist, bevor der Schleifenrumpf (Schritte b und c) ausgeführt wird. Du brauchst aber eine Schleife, die nach der Ausführung des Schleifenrumps (Schritte b und c) prüft, ob die Bedingung erfüllt ist.
 

quill

Mitglied
Klappt die do...while-Schleife, da sie ja fußgesteuert ist?

Java:
do {
    int quersumme = crossSum(x);
    if (quersumme > 2) {
            x = quersumme / 2;
        }
}
while (quersumme >= 2);
 

mihe7

Top Contributor
Genau, nur die Deklaration der Variablen quersumme muss vor der Schleife erfolgen, da die Variable außerhalb des Blocks (geschweife Klammern) nicht bekannt ist:
Java:
int quersumme;
do {
    quersumme = crossSum(x);
    ...
} while (quersumme >= 2);
 

quill

Mitglied
Muss ich noch was für e oder irgendein anderen Teil tun?

Bis jetzt sieht mein Quellcode so aus:

Java:
public class QuersummeBerechnung {
 
 
    // Methode zur Berechnung der Quersumme einer positiven ganzen Zahl
    public static int crossSum(int zahl) {
        int quersumme = 0;
         while (zahl > 0) {
             quersumme += zahl % 10;
             zahl /= 10;
         }
         return quersumme;
     }
 
     public static void main(String[] args) {
         // a. -d.
        // Schritt a
        int x = 80611;
        // Schritt b
        int quersumme = crossSum(x);
        // Schritt c
        if (quersumme > 2) {
            x = quersumme / 2;
        }
        // Schritt d
        int quersumme;
    do {
            quersumme = crossSum(x);
            ...
    } while (quersumme >= 2);
    
         // e. Gib die endgueltige Quersumme aus.
         System.out.println("Endgueltige Quersumme: " + );
     }
 
}
 

mihe7

Top Contributor
  1. Die Zeilen 18 bis 23 raus - die sollen ja in der do-while-Schleife wiederholt werden
  2. Die while-Bedingung ist noch falsch: "Wiederhole b und c, bis die Quersumme nicht größer als 2 ist.", d. h. so lange (while) die Quersumme größer als 2 ist.
  3. Zum Thema Ausgabe: Du musst natürlich schon noch hinschreiben, welche Variable ausgegeben werden soll.
 

quill

Mitglied
Java:
public class QuersummeBerechnung {
 
 
    // Methode zur Berechnung der Quersumme einer positiven ganzen Zahl
    public static int crossSum(int zahl) {
        int quersumme = 0;
         while (zahl > 0) {
             quersumme += zahl % 10;
             zahl /= 10;
         }
         return quersumme;
     }
 
     public static void main(String[] args) {
         // a. -d.
        // Schritt a
        int x = 80611;
        // Schritt d
        int quersumme;
    do {
            quersumme = crossSum(x);
            ...
    } while (quersumme > 2);
    
         // e. Gib die endgueltige Quersumme aus.
         System.out.println("Endgueltige Quersumme: " + quersumme );
     }
 
}
 

quill

Mitglied
Java:
public class QuersummeBerechnung {
 
 
    // Methode zur Berechnung der Quersumme einer positiven ganzen Zahl
    public static int crossSum(int zahl) {
        int quersumme = 0;
         while (zahl > 0) {
             quersumme += zahl % 10;
             zahl /= 10;
         }
         return quersumme;
     }
 
     public static void main(String[] args) {
         // a. -d.
        // Schritt a
        int x = 80611;
        // Schritt d
        int quersumme;
    do {
            quersumme = crossSum(x);
            ...
    } while (quersumme > 2);
    
         // e. Gib die endgueltige Quersumme aus.
         System.out.println("Endgueltige Quersumme: " + quersumme + );
     }
 
}
 

mihe7

Top Contributor
Die Zeile 22 sind doch nur Auslassungszeichen. Dort sollte Dein if-Block stehen :)

Und in Zeile 26 kommt nach quersumme natürlich kein + mehr.
 

Neue Themen


Oben