Java-Tutorium - Informatik.uni-stuttgart.de

Werbung
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.
Herunterladen