ich gebe einer Methode zwei int Parameter: Jahr und Monat.
Die Methode soll zurückgeben, ob das angegebene Jahr ein Schaltjahr ist oder nicht (Schaltjahre: 2020, 2024, 2028...).
Ich habe es versucht, die Schaltjahre in einem Array zu speichern und mit If abzufragen.
Nun funktioniert aber die If - Abfrage nicht richtig.
Ausgegeben werden beide Optionen, mit 28 und mit 29 Tage.
Kann mir bitte jemand helfen, wo das Problem ist?
Vielen Dank im Voraus für die Hilfe
Code:
public class Test3 {
public static void main(String[] args) {
gibInfo(2020, 2); //jahr, monat
}
public static void gibInfo(int jahr, int monat) {
int januar = 31;
int februar = 28;
switch (monat) {
case 1:
System.out.println("Im Jahr " + jahr + " Monat Januar " + " hat " + januar + " Tage");
break;
case 2:
int schaltjahr = 0;
int[] schaltjahre = new int[3000];
for (int i = schaltjahr; i < schaltjahre.length; i++, schaltjahr = schaltjahr + 4) {
schaltjahre[i] = schaltjahr;
if (schaltjahre[i] == jahr) {
System.out.println("Im Schaltjahr " + jahr + " hat Februar 29 Tage");
System.exit(0);
}
else {
System.out.println("Im Jahr " + jahr + " hat Februar " + februar + " Tage");
}
}
}
}
}
Es gibt relativ einfache Regeln, welches Jahr ein Schaltjahr ist (es ist nicht einfach jedes vierte Jahr!).
Und hierfür ein Array anzulegen, ist völlig unnötig.
EDIT: Du würdest ja auch nicht mit folgender Methode testen, ob eine angegebene Zahl gerade ist:
Java:
publicstaticbooleanistZahlGerade(int zahl){int[] arr =newint[1000000];for(int i =0, gerade =0; i < arr.length; i++, gerade +=2){
arr[i]= gerade;if(zahl == arr[i])returntrue;}returnfalse;}
Vereinfacht steht dort, ein leap year ist, wenn es a) durch 400 teilbar ist oder wenn es b) durch 4, jedoch c) nicht durch 100 teilbar ist.
a v (b ^ c).
Ob das jedoch für alle Jahre gilt (z. B. -24) weiß ich nicht.
staticbooleantripleCheck(int year){int i =-4000;while(i < year){
i +=4;}return((i == year)==Year.isLeap(year))&&((year %400==0||(year %4==0&& year %100!=0))==Year.isLeap(year));}publicstaticvoidmain(String[] args){for(int i =-4000; i <3000; i++){System.out.println(i +" "+tripleCheck(i));if(!tripleCheck(i)){break;}}System.out.println(Year.isLeap(-3900));System.out.println(-3900%400==0||(-3900%4==0&&-3900%100!=0));}
Vereinfacht steht dort, ein leap year ist, wenn es a) durch 400 teilbar ist oder wenn es b) durch 4, jedoch c) nicht durch 100 teilbar ist.
a v (b ^ c).
Ob das jedoch für alle Jahre gilt (z. B. -24) weiß ich nicht.
Der bis 1582 übliche Julianische Kalender fügt genau alle vier Jahre einen Schalttag ein. Dann hat der Februar 29 statt 28 Tage und das Jahr 366 statt 365 Tage. Im gregorianischen Kalender entfallen in 400 Jahren drei dieser Schalttage.
Vielen Dank an Alle!
Ich sehe schon, dass ich für meine eigentliche Frage ein falsches Beispiel mit Schaltjahr genommen habe, bin noch Anfänger
Ich hatte das Problem mit der If Abfrage.
Abgesehen vom Beispiel Schaltjahr, habe ich die eine Ausgabe außerhalb der Klammer gesetzt und es funktioniert
Code:
public class Test3 {
public static void main(String[] args) {
gibInfo(2028, 2);
}
public static void gibInfo(int jahr, int monat) {
int januar = 31;
int februar = 28;
switch (monat) {
case 1:
System.out.println("Im Jahr " + jahr + " Monat Januar " + " hat " + januar + " Tage");
break;
case 2:
int schaltjahr = 0;
int[] schaltjahre = new int[3000];
for (int i = schaltjahr; i < schaltjahre.length; i++, schaltjahr = schaltjahr + 4) {
schaltjahre[i] = schaltjahr;
if (jahr == schaltjahre[i]) {
System.out.println("Im Schaltjahr " + jahr + " hat Februar 29 Tage");
System.exit(0);
}
}
System.out.println("Im Jahr " + jahr + " hat Februar " + februar + " Tage");
}
}
}
Da das alles zwar (mehr oder weniger) sinnvolle aber letztlich willkürlich definierte Systeme sind, würde ich einfach annehmen, dass es schlicht davon abhängig ist, auf welches man sich bezieht
Wenn Du Kalendertage meinst: aktuell ist der gregorianische Kalender dem julianischen um 13 Tage voraus, heute wäre also nicht der 15.02. sondern der 02.02.2020. Wir bewegen uns also mit dem 02.02.2020 im System des julianischen Kalenders und damit kann man die Anzahl der Tage zu einem beliebigen julianischen Datum doch relativ einfach ausrechnen.
Na ja, ich glaube es interessiert den Historiker nicht so sehr, ob der Vesuv-Ausbruch, der zum Untergang von Pompeji geführt hat, vor ungefähr 708800 Tagen war, sondern eher der relative zeitliche Bezug zu anderen Ereignissen dieser Epoche. Da bietet sich dann doch das jeweils passende Kalendarium an.
Am besten rechnet man sowieso immer alles in Star-Trek-Sternzeit um.
Ja, dass die Russen einen eigenen Kalender hatten, war mir bekannt. Zwischen dem 1. und dem 13. Februar 1918 verschwanden einfach 13 Tage. Danach folgte direkt der 14. Februar. Aber das beantwortet ja meine Frage noch nicht, wie man die Tage seit dem Vesuv-Ausbruch und den Untergang Pompejis korrekt berechnet.