Java - Übung

Werbung
Android will doch nur spielen
Java
– Übung –
Vorbereitung:
Erstellen Sie mit Eclipse zunächst ein neues Java Projekt „JavaUebungen“. Lassen Sie die restlichen
Einstellungen unverändert. Erzeugen Sie das Projekt durch einen Klick auf „Finish“. In Ihrem
Projektordner wurde ein (leerer) Ordner „src“ angelegt. Erstellen Sie darin das Paket
„ipvs.android.workshop.exercises“. Kopieren Sie die bereits für Sie vorbereitete Java Klasse
„Exercises.java“. Diese Klasse ruft Ihre bereits bearbeiteten Übungsaufgaben auf. Dazu müssen Sie
zuvor in dieser Klasse die Kommentierung (//) vor der jeweiligen Übung aufheben.
Übung 1:
Legen Sie in dem soeben erstellten Paket ein Unterpaket „exercise01“ an. Erzeugen Sie darin eine
Java-Klasse mit dem Namen „Exercise_01“ und lassen Sie Eclipse die main Methode automatisch
erstellen. Lassen Sie diese Methode „Hallo, Java!“ ausgeben.
Verwenden Sie hierfür die Methode „println“ aus dem Java Paket „System.out“. „Bauen“ Sie
Ihr soeben erzeugtes Projekt und testen Sie, ob es funktioniert.
Übung 2:
Legen Sie ein Unterpaket „exercise02“ an. Erzeugen Sie darin eine Java-Klasse mit dem Namen
„Exercise_02“ und lassen Sie Eclipse die main Methode automatisch erstellen. Lassen Sie diese
Methode Sie persönlich begrüßen. Sie soll also „Hallo, >>Ihr Name<<!“ ausgeben.
Den Namen können Sie als command-line Parameter übergeben. Diese Parameter verwaltet die main
Methode in Java im Array „args“. Prüfen Sie zunächst ab, ob nur ein Parameter angegeben wurde
(length) und verwenden Sie diesen (args[0]) für Ihre Ausgabe.
Wurden zu viele (oder zu wenige Parameter angegeben, so sollten Sie den Benutzer über seinen
Fehler aufklären!
Übung 3:
Legen Sie ein Unterpaket „exercise03“ an. Erzeugen Sie darin eine Java-Klasse mit dem Namen
„Exercise_03“ und lassen Sie Eclipse die main Methode automatisch erstellen. Lassen Sie diese
Methode Sie persönlich begrüßen. Sie soll also „Hallo, >>Ihr Name<<!“ ausgeben.
Im Gegensatz zu Übung 2 soll der Name des Benutzers aber erst zu Laufzeit Abgefragt und eingelesen
werden. Dies kann in Java mittels eines „Scanner“ implementiert werden. Implementieren Sie ein
Programm, das zunächst nach dem Namen des Benutzers fragt, diesen Einliest und anschließend
wieder ausgibt.
Wie der Scanner arbeitet können Sie in der Klasse „Exercises.java“ nachschauen.
Übung 4:
Legen Sie ein Unterpaket „exercise04“ an. Erzeugen Sie darin eine Java-Klasse mit dem Namen
„Exercise_04“ und lassen Sie Eclipse die main Methode automatisch erstellen. Diese Klasse soll für
ein angegebenes Jahr ermitteln, ob es sich dabei um ein Schaltjahr handelt.
Ein Jahr ist ein Schaltjahr, wenn
es durch 4, aber nicht durch 100 teilbar ist ODER
es durch 400 teilbar ist.
Erzeugen Sie hierfür zunächst eine statische Methode „isLeapYear“, die prüft, ob ein angegebenes
Jahr ein Schaltjahr ist und dies als Wahrheitswert zurückgibt. Diese Methode soll außerhalb dieser
Klasse nicht sichtbar sein.
Ihre main Methode soll vom Benutzer abfragen für welches Jahr er eine Berechnung durchführen
möchte, diese Angabe an „isLeapYear“ übergeben und anschließend das Ergebnis für den Nutzer
sichtbar machen.
Übung 5:
Legen Sie ein Unterpaket „exercise05“ an. Erzeugen Sie darin eine Java-Klasse mit dem Namen
„Exercise_05“ und lassen Sie Eclipse die main Methode automatisch erstellen. In dieser Übung
sollen Sie einen Taschenrechner implementieren, der die vier Grundrechenarten (+, -, *, /) im
Zahlenbereich der ganzen Zahlen beherrscht.
Gehen Sie bei der Implementierung folgendermaßen vor: Fragen Sie zunächst vom Benutzer zwei
ganze Zahlen (Integer) a, b ab. Im Anschluss soll der Benutzer eine der vier Grundrechenarten
eingeben. Führen Sie danach die entsprechende Berechnung durch und geben Sie das Ergebnis
(zusammen mit der Information was Sie soeben berechnet haben) aus.
Achten Sie bei der Division darauf, dass b = 0 nicht gestattet ist! Bedenken Sie weiterhin, dass sich,
bedingt durch die Division, das Ergebnis nicht mehr zwangsläufig im Bereich der ganzen Zahlen
befinden muss (empfohlener Datentype: double).
Übung 6:
Legen Sie ein Unterpaket „exercise06“ an. Erzeugen Sie darin eine Java-Klasse mit dem Namen
„Exercise_06“ und lassen Sie Eclipse die main Methode automatisch erstellen. In dieser Übung soll
die Summenfunktion
implementiert werden.
Der Benutzer soll eine beliebige natürliche Zahl n eingeben, von der anschließend die oben
angegebene Summe gebildet werden soll. Dafür bietet sich eine for-Schleife an. Die Syntax der forSchleife sieht folgendermaßen aus:
for (Initialisierung; Schleifenbedingung; Inkrement)
Anweisung;
Abschließend soll das Ergebnis dem Benutzer präsentiert werden.
Übung 7:
Legen Sie ein Unterpaket „exercise07“ an. Erzeugen Sie darin eine Java-Klasse mit dem Namen
„Exercise_07“ und lassen Sie Eclipse die main Methode automatisch erstellen. In dieser Übung soll
die Fakultätsfunktion (n! = n * (n – 1) * … * 1) berechnet werden.
Der Benutzer gibt eine beliebige natürliche Zahl n ein, von der anschließend n! berechnet und
ausgegeben werden soll. Diese Berechnung soll iterativ, d.h. mittels einer Schleife erfolgen. Auch für
diese Berechnung bietet sich eine for-Schleife an.
Übung 8:
Legen Sie ein Unterpaket „exercise07“ an. Erzeugen Sie darin eine Java-Klasse mit dem Namen
„Exercise_07“ und lassen Sie Eclipse die main Methode automatisch erstellen. In dieser Übung soll
erneut die Fakultätsfunktion (n! = n * (n – 1) * … * 1) berechnet werden.
Im Gegensatz zu Übung 7 soll die Berechnung nun rekursiv erfolgen. Gehen Sie dabei wie folgt vor:
1. Erzeugen Sie eine statische Methode fac, die zu einem gegebenen n n! zurückgibt.
2. fac muss zunächst überprüfen, ob n < 2 ist und somit das Ergebnis bereits direkt berechnet
werden kann (
).
3. Ist n > 1, so ist das Ergebnis
Rufen Sie von der main Methode aus fac auf und geben Sie dem Benutzer das berechnete Ergebnis
aus.
Übung 9:
Legen Sie ein Unterpaket „exercise09“ an. Erzeugen Sie darin eine Java-Klasse mit dem Namen
„Exercise_09“ und lassen Sie Eclipse die main Methode automatisch erstellen. Diese Klasse soll für
zwei angegebene Parameter die Sudanfunktion berechnen.
Die Sudanfunktion ist eine in der Informatik, hinsichtlich ihrer Berechenbarkeit, interessante
Funktion. Sie ist folgendermaßen definiert:
F0(x, y) = x + y
Fn+1(x, 0) = x, n ≥ 0
Fn+1(x, y + 1) = Fn (Fn+1 (x, y), Fn+1 (x, y) + y + 1), n ≥ 0
Erzeugen Sie eine rekursive Methode zur Berechnung der Sudanfunktion, die n, x und y als
Eingabeparameter erwartet. Geben Sie das Ergebnis der Berechnung aus.
Übung 10:
Legen Sie ein Unterpaket „exercise10“ an. Erzeugen Sie darin eine Java-Klasse mit dem Namen
„Exercise_10“ und lassen Sie Eclipse die main Methode automatisch erstellen. In dieser Übung
sollen drei ganze Zahlen der Größe nach sortiert werden.
Die vom Benutzer ausgewählten Zahlen sollen für diese Übung nicht in lokalen Variablen abgelegt
werden, sondern in einem globalen Array. Erzeugen Sie hierfür zunächst ein privates, statisches,
finales Integer Array der Größe 3 global. Dazu muss sich die Definition außerhalb aller Methoden
befinden. Lesen Sie anschließend in Ihrer main Methode drei ganzzahlige Werte ein und speichern
Sie diese direkt in den drei Zellen des Arrays. Sortieren Sie, wie unten beschrieben diese drei Felder
und geben Sie das Ergebnis aus.
Erstellen Sie eine private, statische Methode swap, die zwei Positionen des globalen Array
übergeben bekommt und diese beiden miteinander vertauscht. Dies soll aber nur geschehen, wenn
beide Positionen sich innerhalb der Grenzen des Arrays befinden. Für diese Überprüfung können Sie
auf die Methode „length“ zurückgreifen.
Erstellen Sie eine weitere private, statische Methode sort, die die Inhalte der drei Felder des Arrays
miteinander vergleicht und der Größe nach sortiert. Verwenden Sie hierfür die soeben erstellte
Methode swap. Versuchen Sie mit so wenig Vergleichen wie möglich auszukommen.
Kleine Überlegung am Rande: Sie haben das Array als final, das heißt unveränderbar definiert.
Können Sie sich erklären, warum Sie dennoch die darin befindlichen Daten manipulieren konnten?
Übung 11:
Legen Sie ein Unterpaket „exercise11“ an. Erzeugen Sie darin eine Java-Klasse mit dem Namen
„Exercise_11“ und lassen Sie Eclipse die main Methode automatisch erstellen. In dieser Übung soll
eine einfache Personenverwaltung in Ansätzen implementiert werden.
Erzeugen Sie ein Unterpaket innerhalb von „exercise11“ mit dem Namen „classes“. Erzeugen sie
darin eine abstrakte Klasse „Person“ mit eingeschränkter Sichtbarkeit. Eine Person besitzt die beiden
Attribute „firstName“ und „lastName“. Für diese Attribute soll ein Standard Setter in der Klasse
bereits definiert werden. Lassen Sie dies Eclipse automatisch generieren (Source -> Generate Getter
and Setter…). Die Getter sollen an dieser Stelle allerdings nicht implementiert, sondern als abstrakt
gekennzeichnet werden! Zusätzlich soll noch folgender Konstruktor implementiert werden:
public Person(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;}
Leiten Sie von dieser Klasse die finale Klasse „Employee“ ab. Ein Angestellter besitzt neben einem
Vor- und Nachnamen noch eine ihm zugeteilte Abteilung („department“). Für diese können Sie
Eclipse ebenfalls Getter und Setter generieren lassen. Der Konstruktor für eine Instanz eines
Angestellten soll folgendermaßen aussehen:
public Employee(String firstName, String lastName,
String department) {
super(firstName, lastName);
this.department = department;}
Da „Employee“ von „Person“ abgeleitet wurde, muss diese Klasse die abstrakten Methoden der
super-Klasse implementieren. Für getFirstName() könnte dies z.B. so aussehen:
@Override
public String getFirstName() {
return super.firstName;}
Zusätzlich können Sie in abgeleiteten Klassen auch nicht abstrakte Methoden der Elternklasse
verfeinern. Für die Klasse der Angestellten soll dies beispielhaft mit der Methode toString
durchgeführt werden:
@Override
public String toString() {
return "Employee " + "(" + department + ") [firstName=" +
getFirstName() + ", lastName=" +
getLastName() + "]";}
Leiten Sie mit „External“ eine weitere Klasse von „Person“ ab. Einem Besucher soll ein Angestellter
als Betreuer („tutor“) zugeteilt werden können. Implementieren Sie alle benötigten Methoden,
genau wie Sie es bereits für Mitarbeiter getan haben. Allerdings soll der Getter für den Nachnamen
nun an den Nachnamen noch die Flag „_ex“ anhängen und die Ausgabe mit toString so
folgendermaßen aussehen (einen Zeilenumbruch innerhalb eines Strings erzeugen Sie mittels \n):
External [firstName=John, lastName=Doe_ex]
supervised by: Employee (AS) [firstName=Christoph, lastName=Stach]
Testen Sie, ob Sie die Klassen richtig implementiert haben, indem Sie in Ihrer main Methode die
beiden Mitarbeiter
Christoph Stach, Abteilung AS
Lars Geiger, Abteilung VS
anlegen. Erzeugen Sie eine Instanz eines Besuchers für sich und weisen Sie sich Christoph Stach als
Betreuer zu. Geben Sie die Instanz des Besuchers mittels toString aus.
Übung 12:
Legen Sie ein Unterpaket „exercise12“ an. Kopieren Sie die vorgegebene Klasse „Exercise_12“ in
dieses Paket. In dieser Übung soll die lineare mit der binären Suche verglichen werden. Erzeugen Sie
darin das Unterpaket „algorithms“. Kopieren Sie die Klasse „SearchAlgorithms“ in dieses Paket. Füllen
Sie die darin enthaltenen Dummy-Methoden „linearSearch“ und „binarySearch“ mit Code, der dem
unten aufgeführtem Pseudocode entspricht. Testen Sie das Programm und sehen Sie sich die Laufzeit
der beiden Algorithmen an. Die binäre Suche sollte in der Regel schneller sein, als die lineare.
Pseudocode:
LineareSuche (Feld, Element)
FÜR i VON 0 BIS Feldlänge – 1
WENN Feld[i] = Element
DANN RÜCKGABE i
RÜCKGABE -1
BinäreSuche (Feld, Element)
VAR Anfang = 0
VAR Ende = Feldlänge – 1
VAR Mitte
SOLANGE Anfang <= Ende
Mitte = (Anfang + Ende) / 2
WENN Feld[Mitte] < Element
DANN Anfang = Mitte + 1
SONST WENN Feld[Mitte] > Element
DANN Ende = Mitte – 1
SONST RÜCKGABE Mitte
RÜCKGABE -1
Herunterladen