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.
Harshad Zahlen sollen in einem Intervall ausgegeben werden
Hallo, für ein Programm sollen die jeweiligen Harshad Zahlen, also die Zahlen die durch ihre eigene Quersumme teilbar sind (777/21 = 37) ausgegeben werden. Das Intervall legt der Benutzer durch Eingabe fest. Wir sind das im Unterricht teilweise zusammen durchgegangen und ich habe eine paar Lösungsansätze gleich in Notepad getippt.
Jetzt steht ich vor dem Problem, dass ich die while-Schleife vom Sinn her nicht verstehe. Wie kann die Quersumme= Quersumme + etwas sein? Genauso wie Zahl = Zahl/10.
Ich überlege schon eine ganze Weile und komme nicht drauf, abgesehen davon dass das Programm auch nicht richtig funktioniert wie es sollte. Es kompiliert zwar aber es wird z.B. wenn man einen Intervall von 20 bis 50 eingibt ausgegeben: 20 ist eine Harshad Zahl, 22 ist eine Harshad Zahl, ist keine Harshad Zahl...+ 27* ist keine Harshad Zahl..
Code:
public class HarshardZahlen4 {
public static void main ( String[] args) {
int obergrenze=0;
int untergrenze=0;
int lsg=0;
int quersumme=0;
int zahl;
System.out.println("Geben Sie eine Untergrenze ein");
untergrenze = Input.readInt();
System.out.println("Geben Sie eine Obergrenze ein");
obergrenze = Input.readInt();
if (obergrenze>0 && untergrenze>0 && untergrenze<obergrenze) {
for (int i = untergrenze; i <= obergrenze; i++) {
zahl = i;
while (zahl>0) {
quersumme = quersumme + (zahl % 10);
zahl = zahl / 10;
}
if ((i % quersumme) == 0) {
System.out.print(i + ", ");
System.out.print("ist/sind HarshardZahl/en");
}
else {
System.out.print("Geben Sie richtige Zahlen ein");
}
}
}
}
}
Hallo,
quersumme = quersumme + irgendwas
bedeutet, dass zur bisherigen Variable quersumme irgendwas addiert wird und das Ergebnis wieder in der Variable quersumme abgelegt wird. Das ist eine übliche Programmiersprachen-Logik und nicht zu verwechseln mit einer mathematischen Gleichung.
Konkreteres Beispiel:
i sei 2, dann bedeutet
i = i + 8 => i = 10
Also vielleicht mal ein Tipp am Rande, die Berechnung der Zahl sollte nicht innerhalb der main Methode stehen, i sollte nicht verändert werden klar, aber die Deklarierung der Variable 'zahl' muss nicht am Anfang der Methode stehen, statt einer einfachen Ausgabe ist auch nachzudenken die Zahlen zu sammeln und dann nach oben zu reichen, der Vergleichsoperator '==' hat eine sehr geringe Priorität deswegen sind einige Klammern hier überflüssig und mach es zu Spagetticode.
Für den Fall, dass die Untergrenze grösser als Obergrenze ist, wie kommt man wieder zurück an den Anfang des Programms? So funktioniert es nicht
Java:
public class HarshadZahlen7 {
public static void main(String[] args) {
int obergrenze = 0;
int untergrenze = 0;
int lsg = 0;
int quersumme = 0;
int zahl;
boolean weiter= true;
System.out.print("Gib die Grenzen des Intervalls ein, dass auf Harshad-Zahlen überprüft werden soll");
System.out.println("Geben Sie eine Untergrenze ein");
untergrenze = Input.readInt();
System.out.println("Geben Sie eine Obergrenze ein");
obergrenze = Input.readInt();
if (obergrenze > 0 && untergrenze > 0 && untergrenze < obergrenze && weiter) {
for (int i = untergrenze; i <= obergrenze; i++) {
zahl = i;
while (zahl > 0) {
quersumme = quersumme + (zahl % 10); //qs3 Z12 q3+2 z1
zahl = zahl / 10;
}
if ((i % quersumme) == 0) {
System.out.print(i + " ");
System.out.println("ist eine Harshad-Zahl.");
}
quersumme = 0;
weiter=false;
}
}
else {
System.out.println("Die Untergrenze muss kleiner als die Obergrenze sein");
System.out.println("Geben Sie eine Untergrenze ein");
untergrenze = Input.readInt();
System.out.println("Geben Sie eine Obergrenze ein");
obergrenze = Input.readInt();
}
}
}
public class HarshadZahlen7 {
public static void main(String[] args) {
int obergrenze = 0;
int untergrenze = 0;
int lsg = 0;
int quersumme = 0;
int zahl;
System.out.println("Gib die Grenzen des Intervalls ein, dass auf Harshad-Zahlen überprüft werden soll");
System.out.println("Geben Sie eine Untergrenze ein");
untergrenze = Input.readInt();
System.out.println("Geben Sie eine Obergrenze ein");
obergrenze = Input.readInt();
while (untergrenze<0 || untergrenze>=obergrenze) {
System.out.println("Die Untergrenze muss kleiner als die Obergrenze sein");
System.out.println("Geben Sie eine Untergrenze ein");
untergrenze = Input.readInt();
System.out.println("Geben Sie eine Obergrenze ein");
obergrenze = Input.readInt();
}
if (obergrenze > 0 && untergrenze > 0 && untergrenze < obergrenze) {
for (int i = untergrenze; i <= obergrenze; i++) {
zahl = i;
while (zahl > 0) {
quersumme = quersumme + (zahl % 10);
zahl = zahl / 10;
}
if ((i % quersumme) == 0) {
System.out.print(i + " ");
System.out.println("ist eine Harshad-Zahl.");
}
quersumme = 0;
}
}
}
}