erstellt 03.12.99; übersetzt 24.06.03; überarbeitet 08.03.05, 28.06.24;


Kapitel 43 Programmieraufgaben

Die Aufgaben setzen das Telefonbuchbeispiel in diesem Kapitel voraus. Die Programmieraufgaben sind Modifikationen dieses Programms.


Aufgabe 1 — Interaktion mit dem Anwender

Wir modifizieren das Programm, so dass es den Anwender nach der Person fragt, die gesucht werden soll:

Name?  Violet Smith
Die Telefonnummer ist: (312) 223-1937

Name?  James Barclay
Die Telefonnummer ist: (418) 665-1223

Name?  Scott Eccles
Namen nicht gefunden

Name?  quit
Good-bye

Natürlich, der Anwender muss den Namen exakt eingeben, damit eine Übereinstimmung gefunden werden kann. Wir vereinfachen die Dinge etwas, in dem wir die toUpperCase() Methode der Klasse String verwenden, um den zu findenden Namen und jeden Namen des Arrays in Großbuchstaben zu konvertieren, bevor auf Gleichheit getestet wird. Jetzt muss der vom Anwender eingegebene Name nicht mehr exakt mit der Groß- und Kleinschreibung übereinstimmen.

Zurück zum Inhaltsverzeichnis.


Aufgabe 2 — Verbesserte Interaktion

Es ist umständlich, dass der Anwender den vollständigen Namen eingeben muss. Wir modifizieren die TelefonEintrags-Klasse, so dass sie vorname, name und telefon enthält. Jetzt fragt das Programm sowohl nach dem Namen als auch nach dem Vornamen. Wenn der Anwender nur den Namen eingibt, geht das Programm das gesamte Array durch und gibt jede Übereinstimmung aus. Wenn der Anwender sowohl den Namen als auch den Vornamen eingibt, wird das Programm die erste Übereinstimmung ausgeben und dann stoppen.

Name?  Smith
Vorname? Violet
Die Telefonnummer ist: (312) 223-1937

Name?  Smith
Vorname?
John Smith: (812) 339-4916
Violet Smith: (312) 223-1937
Willoughby Smith (312) 992-8761

Name?  quit
Good-bye

Um die Fähigkeit des Programms voll zeigen zu können, sollten wir die Größe des Arrays erweitern und mehr Namen und Telefonnummern hinzufügen.

Zurück zum Inhaltsverzeichnis.


Aufgabe 3 — Namen hinzufügen und löschen

Wir ändern das Programm, so dass der Anwender die Wahl zwischen drei Aktionen hat:

  1. Suche nach einem Namen (wie oben).
  2. Hinzufügen eines neuen Namens und Telefonnummer zum Array.
  3. Löschen eines Namens (und der Telefonnummer) aus dem Array.

Hinzufügen Um dem Array einen neuen Namen und eine neue Telefonnummer hinzufügen, suchen wir zuerst nach einer Zelle, die null enthält. Dann konstruieren wir ein neues TelefonEintrags-Objekt und weisen dessen Referenz dieser Zelle zu. Wenn keine Zelle null enthält, meldet das Programm einen Fehler (aber das Programm wird nicht beendet).

Löschen (Einfache Methode:) Um einen Namen und Telefonnummer zu löschen, suchen wir zuerst die Zelle und weisen dann dieser Zelle null zu. (Das vorher durch diese Zelle referenzierte TelefonEintrags-Objekt wird vom Garbage Collector eingesammelt werden.) Wenn der zu löschende Name sich nicht im Array befindet, meldet das Programm einen Fehler.

Löschen (Bessere Methode:) So wie es jetzt steht muss das Programm mit einem Array umgehen, das überall null-Werte in seinen Zellen verstreut haben kann. Das ist ungünstig und für ein großes Array ineffizient. Es ist eine bessere Idee das Array organisiert zu halten, so dass alle null-Werte zusammen am Ende sind. Wenn jetzt das Array durchsucht wird, signalisiert der erste null-Wert das Ende brauchbarer Daten und die Suche stoppt.

Um einen Namen und die Telefonnummer von einem solchen Array zu löschen, suchen wir zuerst die Zelle des Namens. Jetzt kopieren wir die Referenz der letzen Zelle, die nicht null ist, in die Zelle des zu löschenden Eintrags. Dann setzen wir die letzte Zelle, die nicht null ist, auf null. Jetzt ist das gelöschte TelefonEintrags-Objekt Garbage und das ganze Array hat immer noch alle null-Werte am Ende. Wenn der zu löschende Namen sich nicht im Array befindet, meldet das Programm einen Fehler.

Zurück zum Inhaltsverzeichnis.

Ende der Aufgaben