Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben?

Cookiieee

Mitglied
Hallo

ich soll ein Programm schreiben, das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht.

Bitte Jahreszahl eingeben. 2000
oder
Bitte Jahreszahl eingeben. 2021


Ein Jahr sei ein Schaltjahr, wenn die Jahreszahl durch 400 teilbar ist. Oder wenn es durch 4, aber nicht durch 100 teilbar ist. Das Programm gibt aus, ob das eingegebene Jahr ein Schaltjahr ist. Zum Beispiel:

Das Jahr 2000 ist ein Schaltjahr.
oder
Das Jahr 2021 ist kein Schaltjahr.


Ich habe schon angefangen, weiß allerdings, ob das was ich gemacht habe richtig ist, weshalb ich mich für ein paar Tipps freuen würde und wo ich die Zahlen einsetzen soll.

Java:
public class LeapYear {
public static boolean schaltjahr(int jahr) {
  if (jahr % 4==0) {
      return true; }
      
  if (jahr % 4==0 && jahr % 100 !=0) (jahr % 400 ==0) {
      return true; }
      
      return false }
  }

Das soll dabei rauskommen:

Was wird getestet? Eingabe Resultat

LeapYear.main(null); 2000 Bitte Jahreszahl
eingeben. Das Jahr 2000
ist ein Schaltjahr.

LeapYear.main(null); 2020 Bitte Jahreszahl
eingeben. Das Jahr 2020
ist ein Schaltjahr.

LeapYear.main(null); 2021 Bitte Jahreszahl
eingeben. Das Jahr 2021
ist kein Schaltjahr.
 
Da stimmt so einiges nicht.
Punkt 1: Das kompiliert nicht. Zeile 6 ist in der Form nicht kompilierfähig.
Punkt 2: Es ist fachlich falsch Was gibt die Methode bei 1900 zurück? Geh es mal zeilenweise durch.
 
Die Aussagen musst Du doch nur 1:1 übersetzen:

1) Wenn es durch 400 teilbar ist, dann ist es ein Schaltjahr. => Wie testet Du das in Java?

2) Wenn es durch 4 teilbar ist und nicht durch 100 ist dann als nächstes zu testen.

3) In allen anderen Fällen ist es kein Schaltjahr.

Zu 1) kannst Du Dir einfach einmal die erste Bedingung bei Deinem Code ansehen. Was macht der derzeit?

zu 2) Wie kannst Du in einem if zwei Bedingungen mit und verknüpfen? Dann die beiden Bedingungen ähnlich wie bei 1 entsprechend verknüpfen ...
 
Machs doch einfach so...

[CODE lang="java" title="Schaltjahr ausgeben"]import java.time.MonthDay;
import java.time.YearMonth;
int year = 2012;
System.out.println( YearMonth.parse(String.format("%d-02", year) ).lengthOfMonth());
System.out.println(MonthDay.parse("--02-29").isValidYear(year))[/CODE]

Steven
 
Machs doch einfach so...

[CODE lang="java" title="Schaltjahr ausgeben"]import java.time.MonthDay;
import java.time.YearMonth;
int year = 2012;
System.out.println( YearMonth.parse(String.format("%d-02", year) ).lengthOfMonth());
System.out.println(MonthDay.parse("--02-29").isValidYear(year))[/CODE]

Steven
Danke dir erstmal!
Ich weiß ich muss oben noch die Sachen schreiben, aber ich bekomme trotzdem nichts aus diesem Programm raus oder muss ich das irgendwie bearbeiten?
 
Also Sinn dieser Übung dürfte weniger das Nutzen irgendwelcher Klassen aus dem Java Framework als die einfache Umsetzung eines Algorithmus sein mit einfachen if Bedingungen.

Den gegebenen Code würde ich daher an Deiner Stelle erst einmal ignorieren.
 
Also Sinn dieser Übung dürfte weniger das Nutzen irgendwelcher Klassen aus dem Java Framework als die einfache Umsetzung eines Algorithmus sein mit einfachen if Bedingungen.

Den gegebenen Code würde ich daher an Deiner Stelle erst einmal ignorieren.
Ich habe das Jetzt so, mir fehlen aber noch die Wörter "Das Jahr", da bei mir nur bspw. "2000 ist ein Schaltjahr" rauskommt und nicht: "Das Jahr 2000 ist ein Schaltjahr", hat da vielleicht jemand ein Tipp, wo ich das noch einfügen muss?

Java:
public class LeapYear {
            public static boolean istSchaltjahr( int jahr ) {
                if( jahr%400 == 0 ) {
                    // Jahr ist durch 400 teilbar --> Schaltjahr
                    return true;
                } // no else
                if( jahr%4 == 0 ) {
                    // Jahr ist durch 4 teilbar --> Schaltjahr
                    if( jahr%100 == 0 ) {
                        // aber nicht, wenn das jahr auch durch 100 teilbar ist
                        return false;
                    } else {
                        return true;
                    }
                } // no else
                return false;
            }
           
            public static void main(String[] args) {
                int jahre[] = new int[]{ 2000, 2020, 2021 };

                for( int jahr : jahre ) {
                    if( istSchaltjahr( jahr ) ) {
                        System.out.println(jahr + " ist ein Schaltjahr" );
                    } else {
                        System.out.println(jahr + " ist kein Schaltjahr" );
                    }
                }
            }
    }
 
Ich möchte noch anmerken, dass deine ursprüngliche Lösung aus dem ersten Beitrag fast richtig gewesen wäre und auch deutlich besser lesbar als deine aktuelle Lösung
Java:
    public static boolean schaltjahr(int jahr) {
        if (jahr % 400 == 0) { // hier 400 anstatt 4
            return true;
        }
   
        if (jahr % 4 == 0 && jahr % 100 != 0)  { // hier die zweite Klammer entfernen
            return true;
        }

        return false;
    }

Und hier noch die Angeberversion
Java:
    public static boolean schaltjahr(final int jahr) {
        return (jahr % 400 == 0) || (jahr % 4 == 0 && jahr % 100 != 0);
    }

Erklärung: Da die Auswertung in der if-Abfrage genau dem gewünschten Rückgabewert entspricht, kann man direkt das Ergebnis der Auswertung zurückgeben.
Java:
if (jahr % 400 == 0) {
    return true;
}

// bedeutet im Prinzip

if (true) { // wenn das Ergebnis der Bedingung wahr ist, dann gib wahr zurück
    return true;
}

// was diesem entspricht

return jahr % 400 == 0;

// Es fehlt nur noch die zweite Bedingung verknüpft mit einem ODER
 
Zuletzt bearbeitet:

Zurück
Oben