Siehe unten.
public class Monat { // Instanzvariablen private int monat; // 1 == Januar private int jahr; // Jahr als int, z.B. 2017 private int tageImMonat; // Anzahl der Tage in diesem Monat // Temperatur Daten private int[] temp; //Temperatur Tag 1 in temp[1] private boolean[] valide; // Konstruktor public Monat( int monat, int jahr) { this.monat = monat; this.jahr = jahr; temp = new int[ 32 ] ; valide = new boolean[ 32 ] ; switch (monat) { case 1, 3, 5, 7, 8, 10, 12 -> tageImMonat = 31; case 4, 6, 9, 11 -> tageImMonat = 30; case 2 -> { if (istSchaltjahr(jahr)) { tageImMonat = 29; } else { tageImMonat = 28; } } default -> tageImMonat = 0; } } public boolean istSchaltjahr( int jahr ) { return ((jahr % 4 == 0) && (jahr % 100 != 0)) || (jahr % 400 == 0); } public String toString() { return monat + "." + jahr; } }
Warum 32???
Das ist ein gängiger Programmiertrick: Es ist praktischer den Arrayindex 1 für den Tag 1, den Arrayindex 2 für den Tag 2 usw. zu verwenden. Also verwenden wir 32. Die Zelle 0 wird nicht verwendet. Ihr könntet einwenden, das ist Vergeudung. Aber es vereinfacht die Programmierung, was immer ein Vorteil ist. Die Programmierlogik, die man bei einem Index, der um 1 kleiner ist als die Tageszahl, bräuchte, würde viel mehr Bytes benötigen als die nicht verwendete 4 Byte große Zelle.
Aber warum verwenden alle Monate 32, auch wenn manche Monate weniger als 31 Tage haben? Aus dem gleichen Grund wie oben. Nicht verwendete Bytes tun nicht weh.
Die Variable tageImMonat
enthält die Anzahl der Tage eines bestimmten Monats.
Der Konstruktor berechnet das mit Hilfe seiner Parameter jahr
und tag
.
Die Methode istSchaltjahr()
ermittelt, ob es sich bem jahr
um ein Schaltjahr handelt.
Prüft der Konstruktor auf Fehler?