erstellt 03.12.99; übersetzt 24.06.03; © Copyright 2003 Deutsche Übersetzung Heinrich Gailer

Programmieraufgaben

Diese Aufgaben setzen voraus, dass Sie das Telefonbuchbeispiel in diesem Kapitel gelesen haben. Alle Programmieraufgaben sind Modifikationen dieses Programms. Beginnen Sie damit, indem 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 nachgeschlagen 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-by

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

Zurück zur Übersicht.


Aufgabe 2 --- Verbesserte Interaktion.

Es ist umständlich, dass der Anwender den vollständigen Namen eingeben muss. Modifizieren Sie die PhoneEntry-Klasse, so dass sie firstName, lastName, und phone 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-by

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 zur Übersicht.


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 PhoneEntry-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 PhoneEntry-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 PhoneEntry-Objekt Garbage und das ganze Array hat immer noch alle null-Werte am Ende.

Zurück zur Übersicht.



Ende der Aufgaben