Dienstag, 17. Mai 2011

 

Aufgaben zu Collections in Java (POS1: 2A, 2C)

Vorarbeiten
  1. Arbeiten Sie die Beispiele im Buch Kapitel 12 durch. Sie finden den Sourcecode dazu unter /home/teachers/hp/public/pos1-2/kap12 (unter der Linux-Umgebung!).
  2. Machen Sie die Übung 12.8.

Beispielprojekt zu Java-Collections, Import von Projekten in Eclipse
Die Datei java-collections_1_1.zip enthält ein Eclipse-Projekt mit einem Beispiel zur Verwendung der Java-Collection-API.
Im Package simple finden Sie ein Beispiel zur Ermittlung der Worthäufigkeiten wobei im main nur ein Aufruf mit fixen Testdaten (Array) vorhanden ist.
Das Package step1 zeigt die Vorarbeiten zu dem Programm hauf mit einer eigenen Datenstruktur Data, in der ein Wort und die Häufigkeit gespeichert wird. Zusätzlich implementiert Data das Interface Comparable um eine natürliche Sortierung nach dem Wort zu ermöglichen. Das Interface Comparator wird implementiert, um nach Häufigkeiten zu sortieren. Um auch nach Häufigkeiten absteigend zu sortieren, enthält die Datei Data.java noch eine Klasse DataHaufUmgekehrt, welche ebenfalls Comparator implementiert.
Im folgenden der Ausschnitt mit dem main, welches zeigt, wie man sortiert:
public static void main(String[] args) {
    Data[] worte = new Data[] { new Data("das", 12), new Data("Haus", 3),
        new Data("Text", 23), new Data("Punkt", 2), new Data("Testdaten", 12) };
    System.out.println("unsortiert");
    for (Data d : worte) {
      System.out.println("  " + d);
    }
    Arrays.sort(worte);
    System.out.println("sortiert nach Wort");
    for (Data d : worte) {
      System.out.println("  " + d);
    }
    Arrays.sort(worte, new Data());
    System.out.println("sortiert nach Anzahl");
    for (Data d : worte) {
      System.out.println("  " + d);
    }

    Arrays.sort(worte, new DataHaufUmgekehrt());
    System.out.println("sortiert nach Anzahl absteigend");
    for (Data d : worte) {
      System.out.println("  " + d);
    }
  }

Im Paket step2 wird dann das Beispiel ausgebaut, sodass in der Klasse Hauf zwei Varianten von Maps zum Speichern der Worthäufigkeiten verwendet werden. Eine HashMap und eine TreeMap. Für die HashMap muss die Klasse Data zusätzlich noch die Methoden equals() und hashCode() implementieren (überschreiben).
Im main von Hauf werden dann Worte aus der Standardeingabe gelesen und in den zwei Maps gespeichert.

Die Datei java-collections_1_1.zip kann nach dem Download direkt in Eclipse importiert werden:
Man wählt dann die Datei aus:
Man erhält dann folgendes Projekt:


Erweiterung
Erweitern Sie das Projekt so, dass die Worthäufigkeiten in Dateien ermittelt werden können.
Aufruf: java Hauf [-h] [-o ausgabe] files...
Es sollen also keine, eine (stdin) oder mehrere Dateien verarbeitet werden können. Optional erfolgt die Ausgabe in eine Datei (Option -o). -h soll eine kurze Hilfe ausgeben.
Wird mehr als eine Datei angegeben, so sollen für jede Datei die häufigsten 10 Worte ausgegeben werden (Ausgabe Dateiname, dann die 10 häufigsten Worte) und zum Schluss die Gesamthäufigkeiten aller Worte in allen Dateien.

Nennen Sie das Projekt collectionhauf (klasse-name-collectionhauf).

Labels: , ,


Mittwoch, 4. Mai 2011

 

Aufgabe: Interfaces (POS1: 2A, 2C)

Aufgabe 1:
Implementieren Sie folgendes Interface, sodass Sie Speicher-Objekte für beliebig viele int-Werte haben können. Schreiben Sie ein passendes Testprogramm.
/**
 * Container für int-Werte.
 * 
 * @author Harald R. Haberstroh (hp)
 * 
 */
public interface IntContainerI {
    /**
     * Aufnehmen eines neuen Elements.
     * 
     * @param element
     *            neues Element, das aufgenommen werden muss (hinten)
     */
    public void add(int element);

    /**
     * Liefern eines Elements.
     * 
     * @param index
     *            gesuchtes Element
     * @return Element an dieser Stelle
     */
    public int get(int index);

    /**
     * Ganzen Container als Array.
     * 
     * @return liefert alle gespeicherten Elemente als Array
     */
    public int[] getArray();

    /**
     * Ändern eines Elements.
     * 
     * @param index
     *            Indes des Elements, das geändert werden soll
     * @param value
     *            neuer Wert
     */
    public void set(int index, int value);

    /**
     * Anzahl der gespeicherten Elemente liefern (Größe)
     * 
     * @return Größe des Containers (Anzahl der Elemente).
     */
    public int size();
}
Aufgabe 2:
Ändern Sie das Interface so, dass beliebige Objekte verwendet werden können. Nennen Sie das Interface ContainerI. Schreiben Sie eine Klasse, die das Interface implementiert und programmieren Sie passende Tests, um die neue Klasse zu testen.

Labels: ,


This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]