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: Unterschied zwischen den Versionen

(Vormittags: link Wiederholungsaufgabe)
Zeile 13: Zeile 13:
  
 
'''Empfehlung zum Vorgehen:'''
 
'''Empfehlung zum Vorgehen:'''
Ihr solltet für jede Methode die ihr schrebt zunächst einen Test in der Main-Methode anlegen.
+
Ihr solltet für jede Methode, die ihr schrebt, zunächst einen Test in der Main-Methode anlegen.
Mit Test ist hier z.B. ein Aufruf der Methode und die Ausgabe ihres Rückgabewertes auf der Console gemeint.
+
Mit Test ist hier z.B. ein Aufruf der Methode und die Ausgabe ihres Rückgabewertes auf der Konsole gemeint.
  
  
 
=== Zufallszahlen ===
 
=== Zufallszahlen ===
:*Schlage die Methode [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html#random() Math.random()] in der Java API nach.  
+
:*Schlage die Methode [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html#random() Math.random()] in der Java-API nach.  
:*Verwende sie, um eine Methode ''void setRandomGrades()'' zu schreiben die jedem Studenten eine zufällige Hauptdiplomsnote zuweist.
+
:*Verwende die Methode, um eine Methode ''void setRandomGrades()'' zu schreiben, die jedem Studenten eine zufällige Hauptdiplomsnote zuweist.
  
  
=== umwandeln in eine Zeichenkette ===
+
=== Umwandeln in eine Zeichenkette ===
 
:*Implementiere die Methode [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString() toString()] für die Student-Klasse.  
 
:*Implementiere die Methode [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString() toString()] für die Student-Klasse.  
 
:*Verändere printMe() so, dass sie diese neue Methode verwenden.  
 
:*Verändere printMe() so, dass sie diese neue Methode verwenden.  
Zeile 29: Zeile 29:
 
:Beispiel:
 
:Beispiel:
 
  123456 Lieschen Müller
 
  123456 Lieschen Müller
:*Implementiere die Methode die Methode [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString() toString()] für die StudentDatabase-Klasse, die sämtliche Studenten und anschließend die Anzahl der Studenten in der Datenbank zurückgibt. Jeder Student soll in einer eigenden Zeile stehen und die Zeile mit der Anzahl der Studenten soll mit einem Lehrzeichen oder Tab beginnen.
+
:*Implementiere die Methode [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString() toString()] für die StudentDatabase-Klasse, die sämtliche Studenten und anschließend die Anzahl der Studenten in der Datenbank zurückgibt. Jeder Student soll in einer eigenen Zeile stehen und die Zeile mit der Anzahl der Studenten soll mit einem Lehrzeichen oder Tab beginnen.
 
:Beispiel:
 
:Beispiel:
 
  123456 Lieschen Müller  
 
  123456 Lieschen Müller  
 
  123457 Franz Schmidt
 
  123457 Franz Schmidt
 
  _2
 
  _2
:*(Wenn Du in der Übung am Vormittag schon eine Methode geschrieben hast, die eine Durchschnitts-Note der Studenten berechnet, dann gib diese hier ebenfalls aus).
+
:*(Wenn Du in der Übung am Vormittag schon eine Methode geschrieben hast, die eine Durchschnittsnote der Studenten berechnet, dann gib diese hier ebenfalls aus).
  
  
 
=== Arraylists ===
 
=== Arraylists ===
:*Lese den Javadoc zu [http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html ArrayList] und ersetze in der Studentendatenbank die Datenstruktur Array durch die Arraylist.  
+
:*Lese den Javadoc zu [http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html ArrayList] und ersetze in der Studentendatenbank die Datenstruktur Array durch die ArrayList.  
 
:*Wie verändern sich die Methoden ''addStudent()'', ''deleteStudent()'' und ''search()'' (sofern du sie implementiert hast)?
 
:*Wie verändern sich die Methoden ''addStudent()'', ''deleteStudent()'' und ''search()'' (sofern du sie implementiert hast)?
 
:* Gibt es Instanz-Variablen die jetzt nicht mehr gebraucht werden?
 
:* Gibt es Instanz-Variablen die jetzt nicht mehr gebraucht werden?
Zeile 44: Zeile 44:
  
 
=== Gleichheit ===
 
=== Gleichheit ===
:*Implementiere eine [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#equals(java.lang.Object) equals()] Methode für Student. Diese soll zwei Studenten als gleich betrachten, wenn diese die gleiche Matrikelnummer haben.  
+
:*Implementiere eine [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#equals(java.lang.Object) equals()]-Methode für Student. Diese soll zwei Studenten als gleich betrachten, wenn diese die gleiche Matrikelnummer haben.  
  
  
 
==== Gleichheit verwenden ====
 
==== Gleichheit verwenden ====
:Nutze equals() um eine Methode ''containsStudent(Student aStudent)'' zu schreiben, die beim Einfügen eines neuen Studenten in die Datenbank nachprüft, ob er bereits in ihr enthalten ist.
+
:Nutze equals(), um eine Methode ''containsStudent(Student aStudent)'' zu schreiben, die beim Einfügen eines neuen Studenten in die Datenbank nachprüft, ob dieser bereits in ihr enthalten ist.
  
 
=== IOUtility ===
 
=== IOUtility ===
 
:*Es soll eine Klasse "IOUtility" geschrieben werden, welche eine Methode ''void writeStringToFile(String content, String filename)'' enthält.
 
:*Es soll eine Klasse "IOUtility" geschrieben werden, welche eine Methode ''void writeStringToFile(String content, String filename)'' enthält.
 
:*Diese soll einen String in eine Datei schreiben. Schaue dir dafür die Java-Klassen [http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileOutputStream.html FileOutputStream] (vor allem die Konstruktoren) und [http://docjar.com/docs/api/java/io/OutputStreamWriter.html OutputStreamWriter] (für die geerbte Methode [http://java.sun.com/j2se/1.3/docs/api/java/io/Writer.html#write(java.lang.String) write(String)]) an.
 
:*Diese soll einen String in eine Datei schreiben. Schaue dir dafür die Java-Klassen [http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileOutputStream.html FileOutputStream] (vor allem die Konstruktoren) und [http://docjar.com/docs/api/java/io/OutputStreamWriter.html OutputStreamWriter] (für die geerbte Methode [http://java.sun.com/j2se/1.3/docs/api/java/io/Writer.html#write(java.lang.String) write(String)]) an.
:*Benutze deine eben geschriebende Methode um die Studentendatenbank in eine Datei auszugeben. Hinweis:  
+
:*Benutze deine eben geschriebende Methode, um die Studentendatenbank in eine Datei auszugeben.
 +
 
 +
Hinweis:  
 
:*Verwende auch hier die toString()-Methode.  
 
:*Verwende auch hier die toString()-Methode.  
:*Von den von euch verwendeten API Methoden können hier verschiedene Exeptions ausgelöst werden um welche wir uns kümmern müssen.
+
:*Von den von euch verwendeten API-Methoden können hier verschiedene Exceptions ausgelöst werden, um welche wir uns kümmern müssen.
:*Da wir in unserer Methode selbst keine Möglichkeit haben diese sinvoll zu behandeln sollen die Exeptions mit "throws" weitergereicht werden.
+
:*Da wir in unserer Methode selbst keine Möglichkeit haben, diese sinvoll zu behandeln, sollen die Exeptions mit "throws" weitergereicht werden.
  
  
 
=== ''Weiterführende Aufgaben'' ===
 
=== ''Weiterführende Aufgaben'' ===
:*Erweitere das IOUtility-Objekt so, dass ihm bereits im Konstruktoraufruf der Name einer Datei übergeben wird auf welcher es arbeiten soll.
+
:*Erweitere das IOUtility-Objekt so, dass ihm bereits im Konstruktoraufruf der Name einer Datei übergeben wird, auf welcher es arbeiten soll.
:*Mit dem Aufruf der Methode ''startReading()'' soll das Objekt die Datei zum lesen öffnen, so dass mit der Methode ''readLine()'' nacheinander ihre Zeilen ausgelesen werden können. Die Methode ''readLine()'' soll dabei ''null'' zurückgeben, wenn beim lesen das Ende der Datei erreicht wurde.
+
:*Mit dem Aufruf der Methode ''startReading()'' soll das Objekt die Datei zum Lesen öffnen, sodass mit der Methode ''readLine()'' nacheinander ihre Zeilen ausgelesen werden können. Die Methode ''readLine()'' soll dabei ''null'' zurückgeben, wenn beim Lesen das Ende der Datei erreicht wurde.
Für den unwahrscheinlichen Fall das noch immer Langeweile herrscht, beginne mit den Aufgaben für den [[Javakurs2006/Tag_3| dritten Tag]].
+
Für den unwahrscheinlichen Fall, dass noch immer Langeweile herrscht, beginne mit den Aufgaben für den [[Javakurs2006/Tag_3|dritten Tag]].
  
  
 
== An die Tutoren ==
 
== 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 [http://www.cs.princeton.edu/introcs/22inout/In.java.html Input-Klasse die wir an der Princeton-Universität gefunden haben].
+
: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 [http://www.cs.princeton.edu/introcs/22inout/In.java.html Input-Klasse, die wir an der Princeton-Universität gefunden haben].
  
 
[[Javakurs2006| <- Zurück zur Übersicht]]
 
[[Javakurs2006| <- Zurück zur Übersicht]]

Version vom 3. April 2006, 23:43 Uhr

<- Zurück zur Übersicht

Vormittags

Nachmittags

Übungsaufgaben

Ziel: Ein IOUtility-Objekt schreiben, das Eingabe und Ausgabe in Java einfach macht.

Idee: Verwendung der Java-API lernen.

Empfehlung zum Vorgehen: Ihr solltet für jede Methode, die ihr schrebt, zunächst einen Test in der Main-Methode anlegen. Mit Test ist hier z.B. ein Aufruf der Methode und die Ausgabe ihres Rückgabewertes auf der Konsole gemeint.


Zufallszahlen

  • Schlage die Methode Math.random() in der Java-API nach.
  • Verwende die Methode, um eine Methode void setRandomGrades() zu schreiben, die jedem Studenten eine zufällige Hauptdiplomsnote zuweist.


Umwandeln in eine Zeichenkette

  • Implementiere die Methode toString() für die Student-Klasse.
  • Verändere printMe() so, dass sie diese neue Methode verwenden.
Hinweis: Die Daten eines Studenten sollen dabei in folgendem Format ausgegeben werden:
Matrikelnummer Name 
Beispiel:
123456 Lieschen Müller
  • Implementiere die Methode toString() für die StudentDatabase-Klasse, die sämtliche Studenten und anschließend die Anzahl der Studenten in der Datenbank zurückgibt. Jeder Student soll in einer eigenen Zeile stehen und die Zeile mit der Anzahl der Studenten soll mit einem Lehrzeichen oder Tab beginnen.
Beispiel:
123456 Lieschen Müller 
123457 Franz Schmidt
_2
  • (Wenn Du in der Übung am Vormittag schon eine Methode geschrieben hast, die eine Durchschnittsnote der Studenten berechnet, dann gib diese hier ebenfalls aus).


Arraylists

  • Lese den Javadoc zu ArrayList und ersetze in der Studentendatenbank die Datenstruktur Array durch die ArrayList.
  • Wie verändern sich die Methoden addStudent(), deleteStudent() und search() (sofern du sie implementiert hast)?
  • Gibt es Instanz-Variablen die jetzt nicht mehr gebraucht werden?


Gleichheit

  • Implementiere eine equals()-Methode für Student. Diese soll zwei Studenten als gleich betrachten, wenn diese die gleiche Matrikelnummer haben.


Gleichheit verwenden

Nutze equals(), um eine Methode containsStudent(Student aStudent) zu schreiben, die beim Einfügen eines neuen Studenten in die Datenbank nachprüft, ob dieser bereits in ihr enthalten ist.

IOUtility

  • Es soll eine Klasse "IOUtility" geschrieben werden, welche eine Methode void writeStringToFile(String content, String filename) enthält.
  • Diese soll einen String in eine Datei schreiben. Schaue dir dafür die Java-Klassen FileOutputStream (vor allem die Konstruktoren) und OutputStreamWriter (für die geerbte Methode write(String)) an.
  • Benutze deine eben geschriebende Methode, um die Studentendatenbank in eine Datei auszugeben.

Hinweis:

  • Verwende auch hier die toString()-Methode.
  • Von den von euch verwendeten API-Methoden können hier verschiedene Exceptions ausgelöst werden, um welche wir uns kümmern müssen.
  • Da wir in unserer Methode selbst keine Möglichkeit haben, diese sinvoll zu behandeln, sollen die Exeptions mit "throws" weitergereicht werden.


Weiterführende Aufgaben

  • Erweitere das IOUtility-Objekt so, dass ihm bereits im Konstruktoraufruf der Name einer Datei übergeben wird, auf welcher es arbeiten soll.
  • Mit dem Aufruf der Methode startReading() soll das Objekt die Datei zum Lesen öffnen, sodass mit der Methode readLine() nacheinander ihre Zeilen ausgelesen werden können. Die Methode readLine() soll dabei null zurückgeben, wenn beim Lesen das Ende der Datei erreicht wurde.

Für den unwahrscheinlichen Fall, dass noch immer 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