Array auf eine Zahl durchsuchen

Diskutiere Array auf eine Zahl durchsuchen im Java Basics - Anfänger-Themen Bereich.
V

ve987

Hallo zusammen,

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");
                    
            }
            }
        }
    }
}
 
H

httpdigest

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:
public static boolean istZahlGerade(int zahl) {
  int[] arr = new int[1000000];
  for (int i = 0, gerade = 0; i < arr.length; i++, gerade += 2) {
    arr[i] = gerade;
    if (zahl == arr[i])
      return true;
  }
  return false;
}
 
Zuletzt bearbeitet:
A

abc66

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.
 
A

abc66

Einfaches "Abzählen" klappt nicht...
Java:
static boolean tripleCheck(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));
}

public static void main(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));
}
 
T

temi

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.
Wikipedia sagt dazu:
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.
 
V

ve987

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 :D

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");
        }
    }
}
 
mihe7

mihe7

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 :)
 
A

abc66

@temi und @mihe7 , ein Historiker muss doch genau wissen oder angeben können, vor wie viel Tagen beispielsweise der Vesuv ausgebrochen ist...
 
mihe7

mihe7

ein Historiker muss doch genau wissen oder angeben können, vor wie viel Tagen beispielsweise der Vesuv ausgebrochen ist...
Definiere Tag.

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.
 
M

Meniskusschaden

@temi und @mihe7 , ein Historiker muss doch genau wissen oder angeben können, vor wie viel Tagen beispielsweise der Vesuv ausgebrochen ist...
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.;)
 
A

abc66

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.
 
Thema: 

Array auf eine Zahl durchsuchen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben