zur vorherigen Seite  zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Siehe unten.


32 Tage

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.


FRAGE 4:

Prüft der Konstruktor auf Fehler?

zur vorherigen Seite  zum Inhaltsverzeichnis   zur nächsten Seite