Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs2006/Tag 2

<- Zurück zur Übersicht

Vormittags

Nachmittags

Übungsaufgaben

Ziel: Ein IOUtility-Objekt schreiben, das Eingabe und Ausgabe in Java einfach macht und die Studentendatenbank mit Hilfe der API um schöne neue Funktionen erweitern.

Advanced: IOUtility erweitern, das es Input/Output quasi wie ein iterator durchführt.

Idee: Verwendung der Java-API lernen.

Meta-Anweisung: Jede der Methoden in dieser Aufgabe ist so zu programmieren, das ihr zuerst in euere main()-Methode einen Aufruf schreibt und das Ergebnis ausgebt um zu Zeigen, wie ihr die Methoden verwenden wollt. Auf jeden Fall muss am Ende der Aufgabe eine main()-Methode existieren die von jeder Methode demonstriert das sie funktioniert. Wird eure main()-Methode zu lang, könnt ihr teile davon in testXXX()-Methoden auslagern damit ihr die Übersicht behaltet.

Aufgaben:

  1. Schlage die Methode Math.random() nach und verwende sie, um in einer Methode void setRandomGrades(), die Arbeit der zentralen Verwaltung zu erleichtern, indem jeder Student in einer Methode eine zufällige Hauptdiplom-Note zugewiesen bekommt.
  2. Implementiere die Methode toString() für die Studenten- und Studidatenbank-Klasse. Verändere printMe() in beiden Klassen so, das sie diese neue Methode verwenden. Hinweis: Ein Student soll dabei so ausgegeben werden, dass erst die Matrikelnummer und dann, nach einem Leerzeichen, der Name ausgegeben wird. Beispiel: "123456 Lieschen Müller".
  3. Implementiere eine Methode toString() für die Datenbank, die erst alle Studenten, pro Student eine Zeile, schreibt. Danach noch eine Zeile (die mit einem Leerzeichen oder Tab beginnt) in der die Anzahl der Studenten in der Datenbank ausgibt. (Wenn Du in der Übung am Vormittag schon eine Methode geschrieben hast, die eine Durchschnitts-Note der Studenten berechnet, dann gebt sie hier ebenfalls aus, andernfalls fällt diese Ausgabe weg).
  4. Lese den Javadoc zu ArrayList und verwende die ArrayList als interne Datenstruktur für die Studentendatenbank anstatt des Arrays. Wie verändern sich die Methoden add(), search() und delete()? Gibt es Instanz-Variablen die jetzt nicht mehr gebraucht werden?
  5. Implementiere eine equals() Methode für Student, die zwei Studenten als gleich betrachtet, wenn sie die gleiche Matrikelnummer haben. Nutze equals() um eine Methode zu schreiben die zeigt, dass ein neuer Student, der in der Datenbank eingefügt wird equals() zu dem Student ist, der unter dieser Matrikelnummer in der Datenbank nachgeschlagen werden kann.
  6. Lese die Javadocs für die notwendigen Java-Klassen die man für Ausgabe benötigt. FileOutputStream vor allem die Konstruktoren, OutputStreamWriter für die geerbte Methode write(String). Verwende dieses Wissen um eine neue Klassse "IOUtility" zu schreiben, dass eine Methode void writeStringToFile(String content, String filename) implementiert, die diese Klassen verwendet um einen String in eine Datei zu schreiben. Benutze diese Methode um die Studiendatenbank in eine Datei auszugeben. Hinweis: Verwende auch hier die toString()-Methode. Bestimmte Exceptions müssen hier bearbeitet werden. Da es keine sinnvolle Behandlungsmöglichkeiten gibt, deklariert ihr die Input-/Output-Methoden so das sie die Exceptions mit throws in der Methodendeklaration weiterreichen.

Advanced Aufgabe für Leute denen das Vorher alles zu Langweilig war:

  1. Erweitere das IOUtility-Objekt so, dass man es mit einem Dateinamen Instanziiert. Danach kann man mit den Methoden startReading() die Klasse in einen Zustand bringen, der Lesen aus der Datei mit den Methoden readLine() erlaubt. Die Methode readLine() soll dabei null zurückgeben, wenn die Datei zuende gelesen wurde.
  2. Wenn immer noch Langeweile herrscht, beginne mit den Aufgaben für den dritten Tag.

An die Tutoren

Eingabe und Ausgabe unter Java ist nicht besonders Elegant - vor allem, wenn man bei einer Aufgabe die Vorteile des Stream-Konzepts überhaupt nicht nutzen kann. Die Studenten sollen daher ein Objekt schreiben das ihnen diese Aufgaben erleichtert. Ein Entferntes Vorbild ist uns dabei eine Input-Klasse die wir an der Princeton-Universität gefunden haben.

<- Zurück zur Übersicht