1. Aufgabe (Spielen mit Objekten) Gegeben sei der auch von der Veranstaltungsseite erhältliche Programmcode auf der rechten Seite, der im Detail zuerst nicht verstanden werden muss. a) Erzeugen Sie sich direkt in BlueJ ein Objekt der Klasse Kasten unter Nutzung des parameterlosen Konstruktors und führen Sie dreimal die Methode tick() aus. Was passiert? b) Erzeugen Sie sich direkt in BlueJ ein Objekt der Klasse Kasten unter Nutzung des Konstruktors mit dem Parameterwert 4 und führen Sie fünfmal die Methode tick() aus. Was passiert? c) Erzeugen Sie sich direkt in BlueJ drei Objekte der Klasse Kasten unter Nutzung des parameterlosen Konstruktors. Führen Sie auf dem ersten entstandenen Objekt die Methode setnaechster aus und übergeben Sie das zweite entstandene Kasten-Objekt als Parameter. Führen Sie auf dem zweiten entstandenen Objekt die Methode setnaechster aus und übergeben Sie das dritte entstandene Kasten-Objekt als Parameter. Führen Sie dann viermal die Methode tick() auf dem ersten Kasten-Objekt aus. Was passiert? d) Realisieren Sie die Aufgaben a) bis c) vollständig unter der Nutzung von Code Pad. e) Schreiben Sie eine neue Klasse Kastenspielerei, die ohne Objektvariablen auskommt und a)-c) jeweils in eigenen Methoden realisiert. public class Kasten{ private Integer zaehler = 0; private Integer grenze = 2; private Kasten naechster; private EinUndAusgabe io = new EinUndAusgabe(); public Kasten(Integer g){ this.grenze = g; public Kasten(){ public void tick(){ this.zaehler = (this.zaehler + 1) % this.grenze; io.ausgeben(""+this.zaehler); if(this.naechster!= null){ if(this.zaehler == 0) { this.naechster.tick(); else { this.naechster.zeigen(); else{ io.ausgeben("\n"); public void zeigen(){ io.ausgeben(""+this.zaehler); if(this.naechster!= null){ this.naechster.zeigen(); else{ io.ausgeben("\n"); public void setnaechster(kasten k){ this.naechster = k; f) Versuchen Sie graphisch zu veranschaulichen, was in c) bei der Ausführung von tick() passiert. g) Was passiert warum, wenn Sie bei einem Kastenobjekt die Methode setnaechster aufrufen und dasselbe Kasten-Objekt als Parameter übergeben? h) [nur für sehr schnelle Leute] Führen Sie a)-g) nochmals mit Objekten der Klasse KastenInv durch, nutzen Sie dann aber die Methode tack() statt tick() in allen Aufgaben. Seite 1 von 5
2. Aufgabe (Analyse von if) Überlegen Sie sich, welche Werte für die Parameter x, y, und z jeweils der Methode analyse() von der rechten Seite übergeben werden müssen, so dass die angegebenen Strings zurückgegeben werden. x y z Ausgabe nullo xman xhalf never ever perhaps yo oh ah nah why public class NoName{ public String analyse(integer x, Integer y, Integer z){ if(x==null y==null z==null){ return "nullo"; if(x>y){ if (x>z){ return "xman"; else { if (2*x>z){ return "xhalf"; else { if(y>z) { return "never ever"; return "perhaps"; else { if (y>2*z){ return "yo"; if(y>z){ return "oh"; else { if (2*z>y){ return "ah"; if (x+y>z-2){ return "nah"; return "why";. 3. Aufgabe (einfache Methoden und if) Schreiben Sie eine Klasse Ueberpruefung, die ohne Objektvariablen auskommt und Objekte der Klasse EinUndAusgabe (s. Veranstaltungsseite) zum Einlesen und Ausgeben nutzt, wenn dies ab c) gefordert ist. Schreiben Sie die folgenden Methoden, bedenken Sie immer, dass Objekte eventuell null sein kein können und geben Sie dann als Ergebnis auch den Wert null zurück. a) Schreiben Sie eine Methode summe(integer,integer,integer), die drei Zahlen übergeben bekommt und die deren Summe zurück gibt. b) Schreiben Sie eine Methode minimum(integer,integer,integer), die drei Zahlen übergeben bekommt und die deren Minimum zurück gibt. c) Schreiben Sie eine Methode rechteckanalyse() mit folgendem Ablauf. Ein Nutzer gibt die Länge und Breite eines Rechtecks ein. Geben Sie dazu die Fläche und den Seite 2 von 5
Umfang des Rechtecks aus. Ein Beispielablauf sieht wie folgt aus, Eingaben sind umrandet. Länge des Rechtecks: 4 Breite des Rechtecks: 3 Umfang: 14 Fläche: 12 d) Schreiben Sie eine Methode empfehlen() mit folgendem Ablauf. Ein Nutzer wird aufgefordert, seine letzten Schulnoten in den Fächern Mathematik und Englisch einzugeben. Das Programm berechnet daraufhin eine Studienempfehlung. Dabei soll die Note in Mathematik mindestens 2,3 und in Englisch 3,0 für eine Empfehlung Informatik sein. Sind beide Noten schlechter, wird vom Informatikstudium abgeraten. Falls nur die Englischnote zu schlecht ist, wird ein Hinweis ausgegeben, dass eine bedingte Studienempfehlung für Informatik ausgegeben werden kann. Falls nur die Mathematik-Note zu schlecht ist, soll zu einem Fremdsprachenstudium geraten werden. Ein Beispielablauf sieht wie folgt aus, Eingaben sind umrandet. Mathematik-Note: 2.7 Englisch-Note: 2.7 Empfehlung: Fremdsprachen-Studium e) Schreiben Sie eine Methode tagexistiert() mit folgendem Ablauf. Ein Nutzer gibt den Tag, den Monat und das Jahr ein und die Methode gibt als Text auf dem Bildschirm aus, ob der Tag existiert. Man erkennt Schaltjahre daran, dass sie durch vier teilbar sind, falls das Jahr auch durch 100 teilbar ist, muss es allerdings auch durch 400 teilbar sein, um ein Schaltjahr zu sein (2000 und 2400 sind Schaltjahre, 2100, 2200 und 2300 nicht. (Ein switch-befehl kann hilfreich sein.) Ein Beispielablauf sieht wie folgt aus, Eingaben sind umrandet. Tag: 29 Monat: 2 Jahr: 2100 Tag existiert nicht 4. Aufgabe (einfache Schleifen) Schreiben Sie eine Klasse Dekoration, die eine Objektvariable vom Typ Interaktionsbrett nutzt und die folgende Methoden implementiert. a) Mit Hilfe einer while-schleife werden in einer Methode sechs Quadrate nebeneinander gezeichnet. b) Ähnlich zu a) werden 10 Quadrate gezeichnet, wobei jedes dritte Quadrat fehlt (damit sind es nur sieben Quadrate). c) Mit Hilfe einer for-schleife werden in einer Methode fünf Nikolaushäuser nebeneinander gezeichnet. d) Mit Hilfe einer for-schleife wird in einer Methode das Muster mit dem umrahmten Quadrat gezeichnet. e) Mit Hilfe zweier ineinander geschachtelter Schleifen entsteht die gezeigte Treppe. f) Mit Hilfe zweier ineinander geschachtelter Schleifen entsteht die gezeigte Pyramide. g) Mit Hilfe zweier ineinander geschachtelter Schleifen entsteht die gezeigte Mauer. Seite 3 von 5
5. Aufgabe (Erstellung und Bearbeitung eines Objekts) Schreiben Sie eine Klasse Konto, die eine einfache Kontoverwaltung ermöglicht. Jedes Konto hat einen Inhaber, eine Kontonummer, den aktuellen Geldbetrag und eine maximale Überziehungssumme als Grenze. a) Schreiben Sie folgenden Konstruktor und folgende Objektmethoden: - Zur Erzeugung eines neuen Konto- Objektes werden der Inhaber, die Kontonummer und die erlaubte Überziehungssumme übergeben, der Geldbetrag wird automatisch auf 0.0 gesetzt. - Es gibt eine get-methode für den Betrag. - Es kann ein Betrag auf das Konto eingezahlt werden. - Es kann ein Betrag vom Konto abhoben werden, dies wird verweigert, wenn man unter die Überziehungssumme fallen würde. - Es können Zinsen auf das Konto gerechnet werden, dabei wird der Zinssatz übergeben. Falls dadurch das Konto überzogen wird, wird eine Warnung ausgegeben. b) Ergänzen Sie JUnit-Testfälle, mit denen Sie Ihre Methoden testen können. Leider sind Textausgaben nicht prüfbar. c) Schreiben Sie einen Nutzungsdialog in einer Klasse Kontodialog, mit dem der Konstruktor und alle Methoden aufgerufen werden können, eventuell werden dazu weitere Methoden benötigt. Wird ein neues Konto angelegt, wird dieses neue Objekt bearbeitet. Ein Beispieldialog kann wie folgt aussehen, Eingaben sind umrandet. 1 Inhaber: Heinz Kontonr: 345 Überziehungskredit: 100 Heinz (345) Kontostand: 0 2 Betrag: 100 Heinz (345) Kontostand: 100 3 Betrag: 199 Heinz (345) Kontostand: -99 - Integer kontonr - String inhaber - Double betrag - Double grenze Konto + Konto(String,Integer,Double) + getbetrag(): Double + einzahlen(double):void + abheben(double):void + zinsen(double):void + tostring():string 3 Betrag: 5 Geht nicht, Konto überzogen Heinz (345) Kontostand: -99 4 Prozentsatz: 10 Konto überzogen Heinz (345) Kontostand: -108.9 0 Heinz (345) Kontostand: -108.9 Seite 4 von 5
6. Aufgabe (Schleifen und Sammlungen [ab h) schwierig]) Schreiben Sie eine Klasse Kontenverwaltung, die Ihre frühere Klasse Konto nutzt und eine Sammlung von Konten verwaltet. Schreiben Sie einen Nutzungsdialog, der folgende Methoden anbietet, die dann umgesetzt werden sollen: a) Anlegen eines neuen Kontos, dabei wird sichergestellt, dass die Kontonummer noch nicht vergeben ist b) Ausgabe aller verwalteten Konten c) Einzahlung auf ein auswählbares Konto d) Auszahlung von einem auswählbaren Konto e) Interne Überweisung, mit der Geld von einem verwalteten Konto auf ein anderes verwaltetes Konto überwiesen werden kann f) Löschen eines Kontos g) Ausgabe aller Konten mit negativem Geldbetrag h) Ausgabe aller Inhaber, die mehr als ein Konto haben i) Vereinigung von mehreren Konten eines Inhabers zu einem neuen Konto, dabei wird der Name des Inhabers eingegeben und wenn er mehr als ein Konto hat, ein neues Konto erzeugt (mit eindeutiger Kontonummer) und alle Geldbeträge auf dieses Konto eingezahlt, die Überziehungssumme berechnet sich als Maximum der Überziehungssummen der alten Konten Es ist sicherlich sinnvoll weitere Methoden, auch in der Klasse Konto, zu ergänzen. Überlegen Sie sich, dass es sinnvoll ist, am Anfang bereits einige Konten anzulegen, damit man beim Neustart des Programms nicht immer wieder neue Werte eintragen muss. Versuchen Sie weiterhin die Ein- und Ausgaben von den eigentlichen Berechnungen in verschiedene Methoden zu trennen. Schreiben Sie für Ihre Berechnungen JUnit-Tests. Der Nutzungsdialog kann wie folgt aussehen: (2) alle Konten (3) einzahlen (4) auszahlen (5) ueberweisen (6) loeschen (7) negative Konten (8) mehrere Konten (9) Kontovereinigung Seite 5 von 5