Informatik Verbund Stuttgart der Universität Stuttgart Java-Tutorium Übungsaufgaben Aufgabe 1 „HelloWorld“-Applikation Machen Sie sich mit der Arbeitsumgebung und den Werkzeugen des JDK vertraut. Gehen Sie zunächst wie folgt vor und üben Sie danach selbstständig weiter. 1. Geben Sie die im Theorie-Teil vorgestellte HelloWorld-Applikation ein (siehe Folienumdruck) und speichern Sie die Datei unter dem Namen HelloWorld.java ab. 2. Rufen Sie den Java-Compiler im Shell-Fenster auf: -> javac HelloWorld.java 3. Nach erfolgreicher Übersetzung (HelloWorld.class) starten Sie den Java-Interpreter: -> java HelloWorld Aufgabe 2 „HelloWorld“-Applet Erstellen Sie nun das im Theorie-Teil vorgestellte HelloWorld-Applet 1. Geben Sie den Sourcecode (HelloWorld.java) für das Applet im Texteditor ein und speichern Sie die Datei ab. 2. Rufen Sie den Java-Compiler auf: -> javac HelloWorld.java 3. Erstellen Sie mit dem Texteditor eine minimale HTML-Datei firstapplet.html und binden Sie Ihr HelloWorld-Bytecode ein. 4. Betrachten Sie das Resultat: -> appletviewer firstapplet.html Aufgabe 3 Sonderzeichen Schreiben Sie ein Programm, welches den folgenden zweizeiligen Text ausgibt: "Ohne Sonderzeichen", sagte er, "ist der Text nicht vollkommen!" Übungsaufgaben Aufgabe 4 Seite 2 Ablaufsteuerung a) Schreiben Sie ein Programm, das die Werte von 1 bis 100 ausgibt. b) Modifizieren Sie die Applikation aus a) so, dass die Ausgabe bei 13 abgebrochen wird (Schlüsselwort break). Könnten Sie anstelle von break auch return verwenden? c) Modifizieren Sie die Applikation aus a) mit einer switch-Anweisung so, dass bei allen durch 13 teilbaren Werten (13, 26, 39, ...) eine Meldung mit der entsprechenden Zahl ausgegeben wird (z.B. „52 ist durch 13 teilbar“). Aufgabe 5 Kreisberechnungen (Schleifen) Schreiben Sie ein Java-Programm, das für die Radiuswerte von 0 bis 10 mit einer Schrittweite von 0,5 jeweils den Umfang, die Fläche und das Volumen (4/3 π * radius * radius * radius ) berechnet. Die Resultate sollen in Tabellenform (mit Spaltenüberschriften) ausgegeben werden. Hinweis: Die Ausgabe kann mit DecimalFormat dfm = new DecimalFormat("000,00"); System.out.println(dfm.format(floatZahl)); formatiert werden. Aufgabe 6 Array Definieren Sie eine Klasse ArrayAusschnitt, die eine Methode erzeugeBereich() enthält. Die Methode erzeugt aus zwei Integerzahlen (untere und obere Grenze) im Argument ein Array, welches alle zwischen diesen Grenzwerten liegenden Zahlen enthält. Bsp.: erzeugeBereich(2,7) erzeugt ein Array mit den Werten [2, 3, 4, 5, 6, 7] Fügen Sie eine main()-Methode hinzu, die erzeugeBereich() testet. Aufgabe 7 Summe und Durchschnitt (Kommandozeile) Die Kommandozeile wird in Java als gewöhnliches Array an die main-Funktion (Argument) übergeben. Schreiben Sie eine Java-Applikation SumDurch, die aus der Kommandozeile eine beliebige Anzahl von Integerzahlen entgegennimmt und die Summe sowie den Mittelwert dieser Zahlenreihe ausgibt. Hinweis: In der Java-Klasse Integer gibt es eine Klassenmethode parseInt(), die mit einem String als Parameter aufgerufen, einen entsprechenden int-Wert zurückgibt (int a = Integer.parseInt(arg[i])) Übungsaufgaben Aufgabe 8 Seite 3 Mautstelle (Methoden) Stellen Sie sich eine Mautstelle an einer Brücke vor. Die Autofahrer, welche die Mautstelle passieren, müssen einen Brückenzoll von 2,50 DM bezahlen. Für die meisten gilt dieses Prinzip, aber einige Autos dürfen auch ohne Bezahlung passieren. Die Mautstelle registriert die Anzahl der Autos, die diesen Punkt passiert haben, sowie die Summe der Gesamteinnahmen. Bilden Sie diese Abgabenstelle mit Hilfe einer Klasse namens Mautstelle nach. Die zwei Datenelemente sind zum ersten ein Typ int, um die Gesamtzahl der Autos festzuhalten und ein Typ double, um die Gesamtsumme der Einnahmen aufzunehmen. Ein Methode namens zahlendesAuto() erhöht den Wert der Gesamtzahl von Autos um 1 und addiert 2,5 zur Gesamtsumme der Einnahmen. Eine andere Methode namens privilegiertesAuto() inkrementiert die Gesamtzahl der Autos, addiert aber nichts zur Gesamtsumme der Einnahmen. Schließlich zeigt eine Methode anzeigen() die beiden Gesamtwerte an. Integrieren Sie in Ihre Klasse Mautstelle eine main()-Methode, welche die Klasse testet. Aufgabe 9 Punkt (Vererbung) Definieren Sie eine Klasse Punkt mit den Komponenten x und y, einem Default- und einem Initialisierungskonstruktor, Methoden für das Ausgeben und Verändern des Punktes sowie einer Methode zur Berechnung der Distanz zweier Punkte. Hinweis: Die Math-Klasse besitzt eine Quadratwurzel-Methode (float root = Math.sqrt(43.2)). Definieren Sie nun eine Subklasse Punkt3D davon mit der zusätzlichen Komponente z und modifizieren Sie die Methoden entsprechend. Die Daten beider Klassen sollen nach außen hin verborgen bleiben. Fügen Sie eine main()-Methode hinzu, welche die angebotene Funktionalität testet. Aufgabe 10 Überladen von Konstruktoren (Overloading) a) Definieren Sie eine Klasse mit einem Default-Konstruktor (keine Argumente), der eine kurze Meldung ausgibt. Erzeugen Sie ein Objekt dieser Klasse. b) Fügen Sie zur Klasse aus a) einen weiteren Konstruktor hinzu, der ein String-Argument entgegennimmt und es zusammen mit der Meldung aus a) ausgibt. c) Erzeugen Sie in main() ein Array für Elemente von Typ aus b). Fügen Sie zunächst keine Elemente in das Array ein. Werden die Konstruktor-Meldungen bei der Array-Erzeugung ausgegeben? d) Vollenden Sie die Aufgabe, indem Sie Objekte erzeugen und in das Array einfügen. Übungsaufgaben Aufgabe 11 Seite 4 Würfel (Vererbung, Polymorphismus) a) In einer Würfelspiel-Simulation wird eine Klasse für einen einfachen sechsseitigen Würfel benötigt. Schreiben Sie eine Klasse Wuerfel die beim Aufruf der Methode werfen() eine Zufallszahl zwischen 1 und 6 auf dem Bildschirm ausgibt. Schreiben Sie eine passende main()-Methode, die mit demselben Würfel 10 Mal würfelt. b) Modifizieren Sie die Würfel-Klasse, damit verschiedene Würfelalgorithmen (nicht nur Zufallszahlen) verwendet werden können. Außer der bestehenden Zufallszahlen-Realisierung sollen exemplarisch zwei weitere algorithmische Erweiterungen betrachtet werden: - Der Würfel gibt beim Werfen immer einen fest voreingestellten Wert zurück und - beim Werfen werden zyklische Werte zurückgegeben (... 3 4 5 6 1 2 3 4 5 6 1 ...) Realisieren Sie die hinzugekommenen Anforderungen durch eine abstrakte Superklasse SuperWuerfel und die abgeleiteten Klassen ZufallsWuerfel, ZyklischerWuerfel und KonstanterWuerfel. Redefinieren Sie jeweils die Würfel-Methode werfen(). Schreiben Sie eine main()-Methode, die jede Würfelart einmal instanziiert und 10 Mal würfelt. c) Wie könnte ein Würfelbecher aussehen, der auf einen Schlag mit mehreren Würfeln (verschiedene Algorithmen) würfelt? Versuchen Sie diesen Würfelbecher zu implementieren. Aufgabe 12 Mausereignisse (Applet) Modifizieren Sie das im Theorie-Teil vorgestellte Linien-Applet so, dass statt Linien grüne Kreise mit dem Durchmesser von 10 Pixel ausgegeben werden. Aufgabe 13 Maut-Applet (Applet) Erstellen Sie ein kleines Applet für die Mautstelle aus Aufgabe 9. Mit zwei Buttons kann die Vorbeifahrt eines zahlenden und eines privilegierten Autos simuliert werden. Die Einnahmen und die Gesamtzahl der Autos wird mit Hilfe von Labels ausgegeben.