erstellt 03.12.99; übersetzt 24.06.03; überarbeitet 08.03.05; © Copyright 2003 - 2005 Deutsche Übersetzung Heinrich Gailer

Programmieraufgaben

Die Aufgaben setzen voraus, dass Sie das Telefonbuchbeispiel in diesem Kapitel gelesen haben. Alle Programmieraufgaben sind Modifikationen dieses Programms. Beginnen Sie damit, in dem Sie dieses Programm nach Notepad kopieren.

Aufgabe 1 — Interaktion mit dem Anwender

Modifizieren Sie 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. Vereinfachen Sie die Dinge etwas, in dem Sie 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 von 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. Modifizieren Sie die TelefonEintrag-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 durch das gesamte Array und gibt jede Übereinstimmung aus. Wenn der Anwender sowohl den Namen als auch den Vornamen eingibt, wird das Programm die erste Übereinstimmung ausgeben, 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 Ihr Programm voll zeigen zu können, sollten Sie 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

Modifizieren Sie das Programm, so dass es mit einem Array umgehen kann, das null in einigen Slots hat. Ändern Sie jetzt 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.

Um dem Array einen neuen Namen und eine neue Telefonnummer hinzufügen, suchen Sie zuerst nach einem Slot der null enthält. Konstruieren Sie dann ein neues TelefonEintrag-Objekt und weisen Sie dessen Referenz diesem Slot zu. Wenn kein Slot null enthält, melden Sie einen Fehler (aber das Programm wird nicht verlassen).

(Einfache Methode:) Um einen Namen zu löschen, suchen Sie zuerst dessen Slot, weisen Sie dann diesem Slot null zu. (Das vorher durch diesen Slot referenzierte TelefonEintrag-Objekt wird vom Garbage Collector eingesammelt werden.) Wenn der zu löschende Name sich nicht im Array befindet, melden Sie einen Fehler.

(Bessere Methode:) So wie es jetzt steht muss das Programm mit einem Array umgehen, das überall null-Werte in seinen Slots 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 Sie zuerst den Slot des Namens. Wenn der zu löschende Namen sich nicht im Array befindet, melden Sie einen Fehler. Kopieren Sie die Referenz des letzen Slots, der nicht null ist, in den Slot des zu löschenden Namens. Setzen Sie dann den letzten Slot, der nicht null ist, auf null. Jetzt ist das gelöschte TelefonEintrag-Objekt Garbage und das ganze Array hat immer noch alle null-Werte am Ende.

Zurück zum Inhaltsverzeichnis.


Ende der Aufgaben