Hauptklausur

Werbung
PRG 2
Hauptklausur
Name: _______________________________
Matrikel-Nr.: __________ Platz: ____
Die Klausur ergibt max. 100 Punkte: Streichen Sie eine der Aufgaben 2-4! 1 und 5 sind Pflicht.
Übertragen Sie Ihre Lösung leserlich auf die beiden angefügten Blätter. Einziges erlaubtes Hilfsmittel
ist ein einseitig handbeschriebenes A4-Blatt, das mit abzugeben ist. Die Benutzung von Schmierblättern und deren Abgabe wird empfohlen. Schreiben sie bitte Ihren Namen auf jedes Blatt!
Klausurtermin 22.07.15 8:00
letzter Versuch? ( ) ja ( ) nein
A1.................
A2 ................
A3 …………..
A4 ………......
A5 …………...
Summe ……....
Note ...............
Streichen Sie bitte eine der Aufgaben 2-4!
_________________________________________________________________________________________
Aufgabe 1. (30 Punkte): Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung in Stichworten dazu.
Ohne Begründung gilt Ihre Antwort als falsch.
( ) Richtig
( ) Falsch
1. Wer Git benutzen will, muss sich zwischen Konsole, grafischem Client oder Egit entscheiden.
Eine Kombination dieser Werkzeuge ist nicht möglich.
Grund:
( )
(
)
Richtig
Falsch
2. Wird in einer java.util.Map ein Wert mit einem bereits vorhandenen Schlüssel eingetragen, so
wird eine Exception geworfen.
Richtig
Falsch
3. Ein Regressionstest ist die erneute Ausführung aller Testfälle nach einer Codeänderung.
Richtig
Falsch
4. Eine Exception muss immer gefangen werden, sie darf auf keinen Fall zum Programmabbruch
führen.
Richtig
Falsch
5. Mit JUnit kann man immer nur eine Klasse testen, nicht das gesamte Programm.
Richtig
Falsch
6. In einem Socket kann nur entweder der InputStream oder der OutputStream benutzt (geöffnet)
werden.
Richtig
Falsch
7. Die Ausführung der run()-Methode in der Standard-Java-Klasse Thread wird nicht automatisch
wiederholt.
Grund:
(
(
)
)
Grund:
(
(
)
)
Grund:
(
(
)
)
5.
Grund:
(
(
)
)
Grund:
(
(
)
)
Grund:
(
(
) Richtig
) Falsch
8. Das Hauptproblem bei der binären Daten-Ein- und Ausgabe ist die Genauigkeit der Zahlen.
Grund:
(
(
) Richtig
) Falsch
9. In einer JavaFX-ObservableList sind alle Elemente vom Typ ObervableListElement.
Grund:
(
(
) Richtig
) Falsch
10. CSV ist ein übliches Datenprotokoll, das von vielen Programmen genutzt wird.
Grund:
I. Schmiedecke
Beuth-Hochschule für Technik
Seite 1/6
PRG 2
Hauptklausur
Aufgabe 2. (30 Punkte)
Für das Finanzamt sind wir alle Nummern! Erst am Ende einer Bearbeitung werden Name und Anschrift des
Steuerbürgers nachgeschlagen. Andererseits muss das Finanzamt Steuernummern vergeben und manchmal Fragen nach
Steuernummern beantworten. Schreiben Sie einen ADT Steuerbuerger, der Steuernummern und Personen verwaltet
und das folgende Interface implementiert:
Interface SteuerBuergerInterface {
public int addSteuerbuerger(Person buerger) throws DuplicateEntryException; // vergibt
// Steuernummer
public Person getSteuerbuerger(int steuernummer) throws NotFoundException;
public int getSteuernummer (Person buerger) throws NotFoundException;
public int anzahlSteuerBuerger();
}
Tipp: Benutzen sie als innere Datenstruktur eine HashMap mit der Steuernummer als Key. Für Zahlen gibt es in Java das
"Autoboxing": Wo sie als Objekt benötigt werden, werden int-,double-, float-Werte (etc.) automatisch in Objekte vom
Typ Integer, Double, Float verpackt und wieder entpackt. Es sind also "Integer a =4;" und auch "int x = a;" erlaubt.
Lösung auf Blatt Nr. _________
Aufgabe 3. (30 Punkte): Schreiben Sie ein Programm Spieler, das über je ein Socket mit dem Vorgänger- und dem
Nachfolgespieler kommunizieren kann. Die Verbindung wird immer unter Angabe von IP-Adresse und Portnummer vom
Vorgänger zum Nachfolger aufgebaut. Über die Socket-Verbindungen wird das (serialisierte) Spielstand-Objekt
weitergegeben. Für einen Spielzug gibt es die Spielstand-Methode void macheZug().
Das Spieler-Programm erhält die eigene Portnummer und die IP-adresse und Portnummer seines Nachfolgers als AufrufParameter der main-Metohde. Ein Spieler-Objekt soll sofort nach Erzeugung die Verbindungen aufbauen und dann
zyklisch den Spielstand empfangen, einen Zug machen und den Spielstand senden. Um den Start und das Ende des
Spiels müssen Sie sich nicht kümmern.
Lösung auf Seite Nr. _________
Aufgabe 4. (30 Punkte): Schreiben Sie ein JavaFX-Programm, das ein größenveränderliches 8x8-Schachbrett darstellt:
Verwenden Sie eine GridPane, der Sie zellenweise Rectangle-Objekte hinzufügen (Rectangle erbt von Node).
Verwenden sie die GridPane-Methode
add(Node node, int column, int row), um die Zellen einzeln hinzuzufügen.
Die Farbe eines Rectangles können sie mit der Methode setFill(Color color) festlegen.
Für die Größenanpassung binden Sie die Breite (widthProperty) und Höhe (heightProperty) der Rechtecke geeignet an
die Breite und Höhe der GridPane, so dass sie beim Größerziehen des Fensters mitwachsen.
Lösung auf Seite Nr. _________
Aufgabe 5. (10 Punkte) Schreiben sie eine Klasse mit einer öffentlichen Methode checkUsernames, die einen
Benutzernamen von der Konsole liest und ihn, falls er bereits zuvor gelesen wurde, in eine Datei "duplicates.log"
schreibt. Für das zeilenweise Lesen erzeugen Sie sich am Besten einen BufferedReader (mit IOException), für das
Schreiben einen PrintWriter (ohne Exceptions).
5 Extrapunkte: Beschreiben Sie, was Sie machen würden, damit die Datei duplicates.log keine Doppeleinträge enthält.
I. Schmiedecke
Beuth-Hochschule für Technik
Seite 2/6
PRG 2
Hauptklausur
Lösung auf Seite Nr. _________
Beginnen Sie hier mit Ihrer Lösung:
Name: ________________________________________
I. Schmiedecke
Beuth-Hochschule für Technik
Seite 3/6
PRG 2
Hauptklausur
Name: ________________________________________
I. Schmiedecke
Beuth-Hochschule für Technik
Seite 4/6
PRG 2
Hauptklausur
Name: ________________________________________
I. Schmiedecke
Beuth-Hochschule für Technik
Seite 5/6
PRG 2
Hauptklausur
Name: ________________________________________
I. Schmiedecke
Beuth-Hochschule für Technik
Seite 6/6
Herunterladen