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