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.
ich habe eine Frage bezüglich des folgenden Quellcodes.
Das Programm soll die Quersumme einer natürlichen Zahl ermitteln
Hier der Quellcode:
Java:
public class Aufgabe5{
public static void main(String[] args) {
int z, qs=0, help;
Scanner input = new Scanner(System.in);
System.out.print("Enter z: "); z = input.nextInt();
if(z>0)
help = z;
else
help = -z;
while(help>0) {
qs = qs +help%10;
help = help/10;
}
System.out.println("Quersumme der Zahl " + z + " ist " + qs);
}}
Ich verstehe nicht was dieses "help " ist und die while schleife auch nicht. Kann mir das bitte jemand erklären??
Mal abgesehen, dass der Source Code furchtbar aussieht: Help sorgt dafür, dass die Zahl positiv ist, damit man bei der Modulo Operation sich keine Gedanken um das Vorzeichen machen muss.
Ich erhalte eine Fehlermeldung beim Kompilieren mit "javac" (mit obigem Quellcode):
C:\Documents and Settings\USER\Desktop\javatmp>javac HelloWorld.java
HelloWorld.java:8: error: cannot find symbol
Scanner input = new Scanner(System.in);
^
symbol: class Scanner
location: class HelloWorld
HelloWorld.java:8: error: cannot find symbol
Scanner input = new Scanner(System.in);
^
symbol: class Scanner
location: class HelloWorld
2 errors
Irgendwie kennt mein Programm "Scanner" nicht.
Wieso?
Ja aber trotzdem viel geholfen hat mir das nicht. Ab zeile 10 verstehe ich nichts mehr
WArum schreibt man qs=qs +help%10. Was bringt mir diese Operation
ALso ich kann das Programm leider nicht mal ausführen. Eclipse meldet mir folgendes: Fehler: Hauptklasse Algorithmus konnte nicht gefunden oder geladen werden
public class Aufgabe5{
public static void main(String[] args) {
int z, qs=0, help;
Scanner input = new Scanner(System.in);
System.out.print("Enter z: "); z = input.nextInt();
if(z>0) //Wenn z größer 0 ist...
help = z; //wird help = z gesetzt
else //Wenn z kleiner 0 ist...
help = -z; //wird help = -z gesetzt >> help ist damit immer größer als 0
while(help>0) //Solange help größer 0 ist
{
System.out.println( "qs= "+qs+", help= "+help );
qs = qs +help%10; //modulo 10 (help%10) bedeutet nichts anderes, als die erste Ziffer abschneiden
help = help/10;
}
System.out.println("Quersumme der Zahl " + z + " ist " + qs);
}
}
Hier mal eine Testausgabe, die meine Kommentare NOCH verständlicher machen sollten:
Code:
Enter z:
1235456
qs= 0, help= 1235456
qs= 6, help= 123545
qs= 11, help= 12354
qs= 15, help= 1235
qs= 20, help= 123
qs= 23, help= 12
qs= 25, help= 1
Quersumme der Zahl 1235456 ist 26
Bedeutung der Fehlermeldung "Hauptklasse konnte nicht gefunden werden" ist klar. Folgende Ursachen sind denkbar:
- Du hast doch einen Fehler in Deinem Code z.B. falsche/fehlende Package-Angabe
- Eclipse kompiliert in einen Outputfolder hinein. Dort kommen dann die .class-Dateien zum liegen. Aus irgend einem Grund fehlt die .class-Datei der Hauptklasse. Ein "Project -> Clean" schafft hier Abhilfe.
while(help>0) {
qs = qs +help%10;
help = help/10;
}
qs und help sind integer. Bei einer division von zwei integern wird immer abgerunden:
9/4 = 2,
15/3 = 5,
19/18 = 1,
8/9 = 0,
9/10 = 0
Das wird dahingehend genutzt, dass du, wenn du eine Dezimalzahl durch zehn teilst, die erste Stelle praktisch abschneidest:
1234 / 10 = 123,
123 / 10 = 12
Mithilfe des Modulos kannst du von der Zahl aber die niederwertigste Stelle extrahieren:
1234 % 10 = 4
123 % 10 = 3
12 % 10 = 2
Die Whileschleife wird solange ausgeführt, bis deine variable help den Wert 0 hat (sie wurde so oft durch 10 geteilt, dass 0 erreicht wird). dabei wird dann in jedem Schritt zuerst der niedrigste Wert extrahiert und auf die aktuelle Quersumme qs addiert:
Java:
qs = qs +help%10;
Anschließend weißt man help einen neuen Wert zu, indem man den aktuellen Wert von help nimmt und den nierdrigsten Wert abschneidet.
P.S. "Hauptklasse Algorithmus nicht gefunden" kommt wohl auch zustande, wenn du versuchst die falsche main-Methode auszuführen. Immerhin ist deine Mail in der Klasse Aufgabe5.