erstellt 03.12.99; übersetzt 24.06.03; überarbeitet 08.03.05, 28.06.24;
Die Aufgaben setzen das Telefonbuchbeispiel in diesem Kapitel voraus. Die Programmieraufgaben sind Modifikationen dieses Programms.
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.
Es ist umständlich, dass der Anwender den vollständigen Namen eingeben muss.
Wir modifizieren die TelefonEintrag
s-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.
Wir ändern das Programm, so dass der Anwender die Wahl zwischen drei Aktionen hat:
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 TelefonEintrag
s-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 TelefonEintrag
s-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 TelefonEintrag
s-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