zur nächsten Seite  zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Siehe unten.


Ausführbarer Code

Hier ist eine ausführbare Version von Month zusammen mit einer Testklasse. Wir kompilieren den Code und führen ihn aus. Dann experimentieren wir damit, bevor wir weitermachen.

import java.util.*;

class Monat
{
  // Konstante
  final int ERRORFLAG = 999;

  // 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);
  }

  // Getters und Setters
  public int getTemp( int tag )
  {
    if ( tag > 0 && tag <= tageImMonat && valide[tag] )
      return temp[ tag ];
    else
      return 999;  // "Magische" Zahl, wird in Kürze verbessert
  }

  public boolean setTemp( int tag, int grad )
  {
    if ( tag > 0 && tag <= tageImMonat )
    {
      temp[tag] = grad;
      valide[tag] = true;
      return true;
    }
    else
      return false;
  }

  public String toString()
  {
    String str = monat + "." + jahr + " \n";
    for ( int tag = 1; tag <= tageImMonat; tag++ )
    {
      str += tag + ": ";
      if ( valide[tag] )
        str += temp[tag] + "; ";
      else
        str += "keine Daten; ";
      str += "\n";
    }
    return str;
  }
}


public class MonatsTester
{
  public static void main( String[] args)
  {
    Scanner scan = new Scanner( System.in );
    Monat jan = new Monat( 1, 2024 ) ;
    String zeile = "J";

    // Monat mit Temperaturen fuellen
    while ( zeile.toUpperCase().charAt(0) == 'J' )
    {
      System.out.print("Tag?  ");
      int tag = scan.nextInt();

      System.out.print("Temperatur? ");
      int grad = scan.nextInt();
      if ( !jan.setTemp(tag, grad ) )
        System.out.println("Fehler im Input ");

      System.out.print("Fortfahren (J/N)? ");
      zeile = scan.next();
    }

    System.out.println( jan );
  }

}

Die Getter-Methode wurden noch nicht getestet. Es wäre gut in der main() Tests dafür hinzufügen.


Frage 9:

Welche Werte sollten aufsummiert werden, um die Durchschnittstemperatur für einen Monat zu berechnen?


zur nächsten Seite  zum Inhaltsverzeichnis   zur nächsten Seite