Compiler-Fehler Schaltjahr berechnen

stehlo

Mitglied
Hallo, ich habe folgende Aufgebenstellung:
"Schreibe eine Methode namens >istSchaltjahr< in der Klasse >Datum<, die ein Jahr als Zahl übernimmt und bestimmt, ob dieses Jahr ein Schaltjahr ist. Diese Methode soll true zurück geben, wenn das Jahr ein Schaltjahr ist, und false im anderen Fall."
Zu beachten ist:Jahre die durch 4 teilbar sind, sind Schaltjahre, außer wenn sie durch hundert teilbar sind, aber wenn sie durch 400 teilbar sind dann schon (also 2000 ist ein Schaltjahr,da es durch 400 teilbar ist, 2100 nicht.)

Das ganze soll ich auf zwei Methoden aufteilen, wobei eine nur Überprüft und die andere ausgibt.
Was ich bisher habe, wobei mein compiler in der for Schleife immer "not a statment" ausgibt:
Code:
import javax.swing.JOptionPane;

public class Datum
{
    public static boolean istSchaltjahr (int jahre){
       for(jahre; jahre>=400; jahre-=400){}          
        if ((jahre%4==0)&&(jahre%100!=0)){
            boolean abfrage=true;
            return abfrage;
        }
    }

        public static void main (String[] args){
        int eingabeJahr = JOptionPane.showInputDialog(null,"Bitte geben Sie ein Jahr an, welches auf ein Schaltjahr überprüft wird");
        ergebnis = Datum.istSchaltjahr(eingabeJahr);
        JOptionPane.showMessageDialog(null,ergebnis);

    }
}


Ich hoffe ihr könnt mir meine(n) Fehler sagen,
vielen Dank!
 
Deine For-Schleife ist falsch deklarierit:
Code:
 for(jahre; jahre>=400; jahre-=400){}
Hier hast du den Typ von 'jahre' vergessen, also int.
Dann hast du einen leeren Block '{}'. Dieser wird pro Schleifendurchlauf ausgefürt. Da dieser leer ist, passt hier nichts.

Not a statement bedeutet hier, dass die Syntax falsch ist. Eine For-Schleife erwartet als erstes eine Zuweisung, also etwa so:
Code:
 for(int i=jahre; i>=400; i-=400){}

Ich habe gedacht, es soll nur eine Zahl überprüft werden und nicht alle, die kleiner gleich dieser Zahl ist?


edit: Das heißt, du prüfst lediglich gar nicht, ob
Code:
jahre%400!=0
ist
 
Ich habe die for Schleife gemacht, damit ich den Fall einberechne, dass die Zahl durch 400 aber auch durch hundert teilbar ist.

Also meine Überlegung war:
Bsp. Jahr 2400 wäre durch 100 teilbar, aber auch durch 400, ist also ein Schaltjahr -> also wird in der for Schleife nun einmal solange der Wert um 400 minimiert, sodass dann weiter überprüft werden kann.
Da nun immer der Wert nach Abzug minimiert wird erreicht dieser den Wert 0 und SOLLTE nach einer Änderung im Programm jetzt auch true zurückgeben

Das Programm läuft soweit, jedoch wenn ich wie im Beispiel genannt 2400 eingebe gibt es false aus. Alle Zahlen durch 400 stimmen nicht, der Rest glaub ich schon.

Hier mein aktueller Code:
Code:
import javax.swing.JOptionPane;

public class Datum
{
    public static boolean istSchaltjahr (int jahre){
        boolean abfrage;
        for(int i=jahre; i>=400; i-=400){}
        if (((jahre%4==0)||jahre==0)&&((jahre%100!=0)||jahre==0)){
            abfrage=true;
        }
        else{abfrage=false;}
        return abfrage;
    }

    public static void main (String[] args){
        String stringJahr = JOptionPane.showInputDialog(null,"Bitte geben Sie ein Jahr an, welches auf ein Schaltjahr überprüft wird");
        int eingabeJahr = Integer.parseInt(stringJahr);
        boolean ergebnis = Datum.istSchaltjahr(eingabeJahr);
        JOptionPane.showMessageDialog(null,ergebnis);

    }
}

Danke für die vorherigen Antworte, hoffe es kann mir wieder jemand weiterhelfen.
 
Das ist aber schlichtweg falsch.
Du solltest dir nochmal angucken wie genau ein Schaltjahr definiert ist und solltest das mit deiner if-Abfrage vergleichen.
Das 2400 false ausgibt, liegt daran:
Code:
(jahre % 100 != 0) || jahre == 0)
Wenn du dir nochmal die Definition anguckst, wirst du sehen, dass du eigentlich diese if-Abfrage benötigst:
Code:
if (jahr % 4 == 0 && (jahr % 100 != 0 || jahr % 400 == 0))
und dann kommt auch das richtige Ergebnis raus.
 

Zurück
Oben