Subato

Resource Files

Date

Implementieren Sie die Klassen Date. Sie soll ganzzahlige konstante Felder mit Namen day, month und year haben.

  • Schreiben Sie eine Methode:
    fun isEarlierThan(that: Date): Boolean
    die testet, ob das Datumsobjekt im Kalender vor einem anderen Datum liegt.
  • Schreiben Sie eine Methode:
    fun isLaterThan(that: Date): Boolean
    die testet ob das Datumsobjekt im Kalender nach einem anderen Datum liegt.
  • Schreiben Sie eine Methode:
    fun isSameDate(that: Date): Boolean
    die testet, ob zwei Datumsobjekte den gleichen Tag bezeichnen, also Tag, Monat und Jahr identisch haben.
  • Schreiben Sie ein Getter-Feld:
    val isLeapYear: Boolean
    das angibt, ob das Datum in einem Schaltjahr liegt.
  • Schreiben Sie ein Getter-Feld:
    val absoluteDaysInYear: Int
    die zurück gibt, wie viel Tage das Jahr des Datums hat.
  • Schreiben Sie eine Methode:
    fun dayOfWeek(): Int
    Das Ergebnis sei eine Zahl zwischen 0 und 6 für die Wochentage von Sonntag, Montag,... bis Sonnabend.
    Ein Algorithmus zur Wochentagsberechnung finden Sie z.B. auf Wikipedia.
    Sie können entweder schrittweise vorgehen und die Tagesziffer, die Monatsziffer, die Jahresziffer, die Jahrhundertziffer und der Schaltjahrskorrektur, wie in dem Algorithmus spezifiziert, berechnen. Sie können aber auch die Formel direkt in Java umzuformulieren.
  • Schreiben Sie eine Methode:
    fun easter(): Date
    Sie soll das Datum für den Ostersonntag im Jahr für das Datumsobjekt berechnen.
    Zur Osterberechnung können Sie z.B. die Gaußsche Osterformel oder auch Spencers Osterformel verwenden.
  • Schreiben Sie eine Methode:
    fun nextDay(): Date
    Es soll der nächste Kalendertag erzeugt werden.
  • Schreiben Sie eine Methode:
    fun mothersDay(): Date
    Es soll der Muttertag für das entsprechende Jahr des Kalenderdatums berechnet werden.
  • Schreiben Sie eine Methode:
    fun monthAsHTML(): String
    Es soll für den Monat in Form einer HTML Tabelle eine wochenweise Anzeige erzeugt, genau wie im folgenden Beispiel für November 2013:
    <table>
      <tr><th>Mo</th><th>Di</th><th>Mi</th><th>Do</th><th>Fr</th><th>Sb</th><th>So</th></tr>
      <tr><td></td><td></td><td></td><td></td><td>1</td><td>2</td><td>3</td></tr>
      <tr><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td></tr>
      <tr><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td></tr>
      <tr><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td></tr>
      <tr><td>25</td><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td></tr>
    </table>
    So sieht der Monat dann auf einer HTML-Seite wie folgt aus:
    Mo Di Mi Do Fr Sb So
            1 2 3
    4 5 6 7 8 9 10
    11 12 13 14 15 16 17
    18 19 20 21 22 23 24
    25 26 27 28 29 30
  • Schreiben Sie eine Methode toString, die ein Datumsobjekt wie folgt als Zeichenkette darstellt: "Fr 30.11.2018".
Der Konstrukor lässt auch zu, dass man unsinnige Datumsokjekte erzeugt, wie zum Beispiel einen 32.12.1812 ider einen 1.13.1714. In Kotlin gibt es eine Anweisung assert. Diese bekommt einen Ausdruck, der zu einen Wahrheitswert auswertet als Argument. Starten Sie Ihr Kotlinprogramm mit der zusätzlichen Option -ea (oder -enableassertions) auf der Kommandozeile gestartet, so werden diese boolchen Ausdrücke während der Laufzeit ausgewertet. Wertet einer zu false aus, dann bricht das Programm ab.
Ergänzen Sie die Klasse Date jetzt einen Initialisierungsblock mit assert-Anweisungen, die zumindest checken, weder Monat noch Tag kleiner als 1, sowie kein Tag größer 31 und kein Monatswert größer 12 zum Initialisieren verwendet wird.

package name.panitz.kotlin.date; class Date(val day: Int, val month: Int, val year: Int) { val isLeapYear: Boolean val absoluteDaysInYear: Int fun nextDay(): Date fun daysInMonth(): Int fun monthAsHTML(): String fun mothersDay(): Date fun dayOfWeek(): Int fun easter(): Date fun isEarlierThan(that: Date): Boolean fun isLaterThan(that: Date): Boolean fun isSameDate(that: Date): Boolean override fun toString(): String }
kt
You are not logged in and therefore you cannot submit a solution.