IT 2 – WS 2008/2009 – Übungsblatt 1 Beispiel 1.1 Das erste Übungsbeispiel soll Sie mit Objekten im BlueJ vertraut machen. • • • • • • • Öffnen Sie das Projekt shapes in chapter01. Erzeugen Sie zwei Kreise und ein Quadrat. Was geschieht, wenn Sie für ein Objekt moveDown() zweimal aufrufen? Was geschieht, wenn Sie makeInvisible() zweimal aufrufen? Rufen Sie die Methode changeColor() an einer Ihrer Kreis-Instanzen auf und übergeben Sie die Zeichenkette "red". Diese sollte die Farbe des Kreises ändern. Versuchen Sie es auch mit anderen Farben. Dies ist ein sehr einfaches Beispiel, es werden nicht sehr viele Farben unterstützt. Was passiert, wenn Sie eine Farbe angeben, die nicht unterstützt wird? Rufen Sie die Methode changeColor() auf und geben Sie die Farbe ohne die Anführungszeichen an. Was passiert? Sorgen Sie dafür, dass mehrere Objekte auf der Objektliste liegen, und untersuchen Sie diese der Reihe nach. Versuchen Sie, den Zustand eines Objekts zu ändern (beispielsweise durch den Aufruf von moveLeft()), während der Objektinspektor geöffnet ist. Sie sollten beobachten können, wie sich die Werte im Objektinspektor ändern. Beispiel 1.2 Im zweiten Beispiel sollen Sie sich bereits mit Java Klassenfiles beschäftigen. • • • • Öffnen Sie das Projekt picture in chapter01. Erzeugen Sie eine Instanz der Klasse Picture und rufen Sie an ihr die Methode draw() auf. Probieren Sie dann die Methoden setBlackAndWhite() und setColor() aus. Öffnen Sie die Klasse Picture. Untersuchen Sie in der Klasse Picture die Methode draw(). Ändern Sie die Methode so, dass die Sonne blau statt gelb ist. Beispiel 1.3 [Picture.java] Verändern Sie die Klasse Picture im Projekt picture so, dass der Zeichnung eine zweite Sonne hinzugefügt wird. Dazu sollten Sie sich die Definition der Attribute zu Beginn der Klassendefinition ansehen. Dort kann eine zweite Sonne eingefügt werden. Vergessen Sie nicht, auch die entsprechenden Anweisungen für die zweite Sonne zu schreiben. Die Datei Picture.java ist abzugeben. Beispiel 1.4 [PictureSunset.java] Fügen Sie einer Kopie PictureSunset der ursprünglichen Klasse Picture (mit nur einer Sonne) eine Methode sunset() hinzu, die bewirkt, dass die Sonne langsam untergeht. Dazu können Sie die Methode slowMoveVertical() der Klasse Circle verwenden. Die Datei PictureSunset.java ist abzugeben. -1- IT 2 – WS 2008/2009 – Übungsblatt 1 Beispiel 1.5 • • • • Öffnen Sie das Projekt naive-ticket-machine in chapter02. Experimentieren Sie mit Objekten der Klasse TicketMachine. Experimentieren Sie mit unterschiedlichen eingeworfenen Beträgen, bevor Sie das Ticket drucken lassen. Verhält sich der Automat in irgendeiner Weise eigenartig? Was passiert, wenn Sie zu viel Geld einwerfen – bekommen Sie das Wechselgeld zurück? Was passiert, wenn Sie nicht genügend Geld einwerfen und dann ein Ticket ausdrucken? Warum funktioniert folgende Version des Konstruktors der Klasse TicketMachine nicht richtig? TicketMachine(int ticketPrice) { int price = ticketPrice; balance = 0; total = 0; } • • • Definieren Sie eine Methode setPrice(int ticketPrice), die das Attribut price auf ticketPrice setzt. Versuchen Sie, die Rückgabeanweisung aus dem Rumpf von getPrice() zu entfernen. Welche Fehlermeldung sehen Sie, wenn Sie versuchen, die Klasse zu übersetzen? Vervollständigen Sie die folgende Methode, deren Aufgabe es ist, das Attribut price um den Wert des Parameters zu verringern? void reducePrice (int amount) { ... } • • • • Erzeugen Sie zwei Ticket-Maschinen mit unterschiedlichen Ticketpreisen. Liefern Aufrufe von getPrice() unterschiedliche oder gleiche Ergebnisse? Wie erklären Sie diesen Effekt? Fügen Sie der Klasse TicketMachine eine Methode message() hinzu. Diese Methode sollte parameterlos sein und keinen Rückgabewert liefern. Der Rumpf der Methode soll folgenden Text ausgeben: „Bitte werfen Sie den passenden Geldbetrag ein.“ Was würde ausgegeben, wenn Sie die vierte Anweisung in der Methode printTicket() so ändern würden, dass price auch mit Anführungszeichen umschlossen ist: System.out.println("# " + "price" + " cents."); Wie sieht es mit folgender Version aus? System.out.println("# price cents."); -2- IT 2 – WS 2008/2009 – Übungsblatt 1 Beispiel 1.6 [TicketMachine.java] • • • • Fügen Sie der Klasse TicketMachine eine Methode printPrice() hinzu. Diese Methode soll parameterlos sein und keinen Rückgabewert liefern. Die Methode soll einen Text mit dem aktuellen Ticketpreis ausgeben: „Der Preis eines Tickets beträgt <price> cents.“ Implementieren Sie eine Methode empty(), mit der simuliert wird, dass dem Automaten alles Geld entnommen wird. Diese Methode soll keinen Rückgabewert liefern, sondern lediglich das Attribut total auf 0 setzen. Implementieren Sie eine Methode getTotal(), die den Wert des Attributs total zurückliefert. Die Datei TicketMachine.java mit den drei neuen Methoden ist abzugeben. -3-