Programmieren Lernen für Anfänger - 09 - Klassen1 - Java Tutorial
Channel: hageldave
Date: 30/04/2013

Diese Tutorials sind für Leute die noch nie programmiert haben und es gerne lernen wollen. Die Programmiersprache die hier behandelt wird ist Java.
Ich werde von Grund auf alles erklären und jeweils Aufgaben bereit stellen damit ihr das im Video erklärte selbst ausprobieren könnt.
Zur Playlist: http://www.youtube.com/playlist?list=PLCg8xlSVyP1o82Fe5bjLBJOKfTv9JSc-Q
- - - - - - - - - - - - - - - - - - - -
In dieser Folge geht es zum ersten mal um Klassen. Ich erkläre was eine Klasse ist und wie man damit einen neuen Datentyp erfindet. Ausserdem geht es um den Unterschied zwischen static und nicht static, speziell im Fall von Attributen.
- - - - - - - - - - - - - - - - - - - -
Aufgaben:

Aufgabe9.1
Erstelle ein neues Projekt. Erstelle im Projekt eine 'MainClass' Klasse mit main-Methode in der du deine anderen Klassen testen kannst.
Erstelle Eine Klasse 'Datum' (nicht 'Date' das gibts schon). Mit dieser Klasse soll man Objekte erstellen können die ein Datum darstellen. Ein Datum besteht aus Tag Monat und Jahr. Erstelle auch eine setUp Methode wie im Video mit der man allen Attributen auf einmal Werte zuweisen kann.

Aufgabe9.2
Erstelle eine Methode in der Datum-Klasse 'public String asString()' die aus den Attributen Tag Monat und Jahr einen String zur Darstellung des Datums erstellt und zurück gibt. (das public vor String ist wichtig, nicht vergessen hin zu schreiben!)
Probiere aus was passiert wenn du in der main-Methode eine variable von deinem Datentyp 'Datum' machst, mit setup Werte zuweist und dann System.out.println(deineVariable); ausführst.
Ändere nun den namen deiner Methode 'asString()' in 'toString()' und probiere es nochmals. Was gibt System.out.println(..) in beiden Fällen aus?

Aufgabe9.3 (schwer!)(Fleisaufgabe)
Passe deine setUp Methode so an dass sie ungültige Eingaben korrigiert, z.B. wenn für den Monat -1 übergeben wird oder für den Tag 32. Die Methode soll gewährleisten dass keine ungültigen Werte in den Attributen für Tag und Monat stehen. 
Bei falschen Eingaben soll folgendes passieren:

- Monat ungültig (nicht zwischen 1 und 12): Wenn zb 0 übergeben wird soll der Monat auf 12 gesetzt werden, wenn -1 übergeben wird soll der Monat auf 11 gesetzt werden. Außerdem soll das Jahr in diesen Fällen veringert werden. Bei -12 wird ebenfalls der Monat auf 12 gesetzt aber das Jahr um 2 veringert da quasi ein ganzes Jahr zwischen -12 und 1 liegt.
Wenn der übergebene Monat größer als 12 ist wird er zb bei 13 auf 1 gesetzt oder bei 14 auf 2, und das Jahr erhöht.

- Tag ungültig:
Hier ist zu beachten dass es Monate gibt die 30 Tage oder 31 Tage haben. Der Einfachheit halber darf der Februar unabhängig vom Schaltjahr immer 29 Tage haben.
Falls Werte kleiner als 1 übergeben werden wird der Monat zurück gedreht, und der Tag entsprechend angepasst. Zb: 0 wird zu 31 (falls der Monat davor 31 Tage hat) oder zu 30 (falls der Monat davor 30 Tage hat). Evtl werden auch mehrere Monate zurückgedreht falls zb. Tag kleiner als -30 ist, Vielleicht wird sogar das Jahr zurück gedreht wenn zb -1, 1, 2014 also der minus erste Januar als Datum übergeben wird.
Bei Tagen größer als der gegebene Monat Tage hat wird dementsprechen im Monat nach vorne gesprungen.

*********
Beispiel: Die Eingabe (Tag,Monat,Jahr) 77, 13, 2014 wird umgewandelt zum Datum 17.03.2015.
(77.13.2014 = 77.01.2015 = 46.02.2015 = 17.03.2015)
*********

Tipp:
Intern mit Monatswerten von 0 - 11 rechnen statt 1 - 12 dann ist es evtl einfacher Arrays zu verwenden und Monate umzurechnen. Das gleiche gilt für Tage 0 - 29 / 0-30 statt 1 - 30 / 1 - 31.

Lösungen:
http://pastebin.com/rRNLadkq