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 soll ein Programm erstellen, dass alle vollkommenen Zahlen in einem Intervall ausgibt, dass der Benutzer eingibt. (Vollkommene Zahlen Beispiel: Zahl 28 => echte Teiler: 1, 2, 4, 7,14 => Summe ist wieder 28)
Leider findet mein Programm keine Einzige bei egal welchem Intervall.
Code:
public class VollkommeneZahlen2 {
public static void main (String [] args) {
int untergrenze;
int obergrenze;
int sum=0;
System.out.println("Geben Sie eine Untergrenze ein");
untergrenze=Input.readInt();
System.out.println("Geben Sie eine Obergrenze ein");
obergrenze=Input.readInt();
for (int i=untergrenze; i>=obergrenze; i++) {
for (int z=1; z>=untergrenze; z++) {
while (untergrenze%z==0) {
sum=sum+z;
}
if (untergrenze==sum) {
System.out.println (untergrenze + "ist eine vollkommene Zahl");
} else {
System.out.println ("Keine vollkommenen Zahlen im eingegebenen Intervall");
}
}
}
}
}
Du solltest dir mal die Abbruchbedingungen deiner for-Schleifen ansehen. Da scheinst du etwas falsch verstanden zu haben. Eine for-Schleife läuft, so lange die Bedingung erfüllt ist. Also nicht so lange, bis die Bedingung erfüllt ist, sondern so lange, bis sie nicht mehr erfüllt ist.
Es gibt aber noch eine Menge weiterer Fehler. Zum Beispiel ergibt die while-Schleife keinen Sinn, die if-Verzweigung befindet sich an einer ungeeigneten Stelle und du benutzt oft die falschen Variablen. Ich würde mal einen Schreibtischtest machen, damit du siehst, welche Werte benutzt werden.
Dann fang doch erst einmal einfach an und schreibe ein Programm, dass für eine gegebene Zahl prüft, ob es eine vollkommene Zahl ist. Die Erweiterung für Intervalle kannst du danach immer noch einbauen.
edit: Achso ja, jetzt habe ich den Sinn verstanden, die 1 ist sowieso nicht von Belang und i muss man -1 rechnen damit es Sinn macht. Sorry alles noch neu für mich.
Danke. Ich bin ja schonmal ganz stolz, dass ich dieselbe Grundidee hatte wie den Quellcode. Das ist jetzt mein drittes Programm. Die geschweiften Klammern haben mir das Programm kaputt gemacht. Kannst du mir das evtl. kurz erklären warum die erste for-Schleife erst ganz am Schluss geschlossen wird und die restlichen Schleifen sofort? Dafür fehlt mir noch etwas das Verständnis.