Hunde bellen
Hunde, die bellen, beißen nicht
Listen von Wortkarten
Um das Spiel programmieren zu können, benötigt man eine Liste, in die man an beliebiger Stelle ein Wort einfügen oder löschen kann. Glücklicherweise müssen wir entsprechende Klassen aber nicht immer selbst programmieren, sondern können einfach entsprechende Klassen benutzen, die uns die benötigte Funktionalität schon fertig bieten.
LinkedList
Java stellt uns viele Klassen zur Verfügung, die wir einfach benutzen können. Eine dieser Klassen hatten wir schon oft benutzt:String
. Eine andere Klasse istLinkedList
, die genau die Funktionalität, die wir von einer Liste erwarten, schon fertig bereit stellt. Daneben gibt es noch mehrere tausend anderer Klassen. Damit die Vielzahl dieser Klassen geordnet werden können, wurden diese in sogenannten Paketen organisiert. Um eine Klasse benutzen zu können, muss man dann das entsprechende Paket am Anfang des Quellcodes - noch vor der Definition der Klasse - importieren. Um z.B. die KlasseLinkedList
aus dem Paketjava.util
benutzen zu können, muss man also im Quellcode schreiben:
import java.util.LinkedList;
// oder um alle Klassen dieses Paketes zu importieren:
import java.util.*;
// Erst danach folgt die Definition der Klasse.
class MeineKlasse{
... hier kann LinkedList jetzt benutzt werden...
}
Wir gehen in den folgenden Beispielen von einer Klasse
Hund
aus:
class Hund {
void bellen() {
System.out.println("Wuff!");
}
}
Innerhalb einer Methode ließe sich dann eine entsprechende Liste z.B. folgendermaßen benutzen:
// Definiere eine Variable und erzeuge eine neue LinkedList
LinkedList liste = new LinkedList();
// Erzeuge einen Hund, der an das Ende der Liste
// angehängt werden soll
Hund struppi = new Hund();
liste.add(struppi);
// oder mit anonymen Objekt
liste.add(new Hund());
// oder Einfügen an bestimmter Stelle
liste.add(1, new Hund());
// Entferne den zweiten Hund, Index ist 1 !!!
liste.remove(1);
// Gibt die Größe der Liste aus, hier: 2
System.out.println(liste.size());
// Gibt das erste Element zurück
Hund bello = liste.get(0);
// Die Liste leeren
liste.clear();
Generische Klassen
Möchte man auf Methoden der KlasseHund
zugreifen, erhält man eine Fehlermeldung:
import java.util.*;
LinkedList liste = new LinkedList();
liste.add(new Hund());
liste.get(0).bellen();
Error: cannot find symbol - method bellen()
Listen durchlaufen
Möchte man alle Elemente einer Liste durchlaufen, kann man dies z.B. mit einer for-Schleife tun:
for(int i = 0; i < liste.size(); i++) {
liste.get(i).bellen();
}
Für solche einfachen Anwendungsfälle kann man alternativ auch die for-each-Schleife benutzen:
for(Typ name: sammlungsobjekt) {
...
}
Angewandt auf das obige Beispiel also:
for(Hund h: liste) { // Lies: Für jeden Hund h aus liste
h.bellen();
}
Hund-Klasse
Einige Übungen gehen von der Verwendung der KlasseHund
aus. Ein Hund bekommt bei der Erzeugung einen zufälligen Namen zugewiesen. Er kann bellen und gibt dabei seinen Namen aus. Die KlasseHund
kannst Du Dir hier herunterladen.
Aufgabe Dokumentation lesen
Aufgabe: Suche in einer Suchmaschine nach den Begriffen "LinkedList Java". Einer der ersten Treffer sollte zur offizielle Dokumentation der KlasseLinkedList
führen. Analog kannst Du die Dokumentation anderer Java-Klassen finden.
Auch wenn Du nicht alle Details verstehen wirst, kannst Du die wesentlichen Informationen erfassen. Finde und teste Methoden zum:
- Entfernen des ersten und letzten Elementes.
- Abfragen des ersten Elementes ohne dieses zu löschen.
- Ersetzen eines Elementes über den Index.
- Überprüfen, ob ein bestimmtes Objekt vorhanden ist.
Lass Dich nicht von der Tatsache verwirren, dass manche Methoden das gleiche bewirken. Das liegt daran, dass eine Liste z.B. auch als Warteschlange oder Stapel benutzt werden kann und dann teilweise andere Methodennamen üblich sind.
Diese Aufgabe stammt von
und steht daher unter folgender Lizenz:
Dieses Werk ist lizenziert unter einer
.