studyklar
GdI 2 · Übungsblatt 7 · Aufgabe 2

Telefonverzeichnis mit einer HashMap

Ein Telefonbuch im Kleinen: Man tippt einen Namen ein und bekommt die Telefonnummer. Die passende Sammlung dafür ist eine Map, sie schlägt einen Wert über einen Schlüssel nach. Rechts steht das fertige Programm, die Zeilen zum aktuellen Schritt sind hervorgehoben. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 2

Erstellen Sie ein Programm mit einem kleinen Telefonverzeichnis. Wenn man auf der Konsole einen Namen eingibt, soll die zugehörige Telefonnummer ausgegeben werden. Gibt es zu dem Namen keinen Eintrag, so wird dies dem Benutzer mitgeteilt, und er kann einen neuen Namen eingeben.

Verwenden Sie eine geeignete Java-Collection, fügen Sie einige Namen und Telefonnummern ein und testen Sie die Abfrage von Telefonnummern.

Das Programm kennt einige Namen mit Telefonnummer. Es fragt immer wieder nach einem Namen. Gibt es den Namen, zeigt es die Nummer. Gibt es ihn nicht, sagt es das, und man kann den nächsten Namen eingeben.

Welche „Java-Collection“ ist geeignet? Eine Collection ist eine Sammlung von Objekten, etwa eine Liste. In einer Liste müsste man alle Einträge durchsuchen, bis der Name passt. Eine Map findet den Eintrag direkt über den Namen.

Merke: Eine Map speichert Paare aus Schlüssel und Wert. Über den Schlüssel findet man den Wert, wie im Telefonbuch: Schlüssel ist der Name, Wert die Nummer. Jeder Schlüssel kommt höchstens einmal vor.
  1. Die Map anlegen und mit Einträgen füllen.
  2. In einer Schleife Namen einlesen, bis „Ende“ kommt.
  3. Für jeden Namen nachschlagen: Nummer oder Hinweis.
  4. Ein Probelauf.

Eine Map von Name zu Nummer anlegen

import java.util.HashMap;import java.util.Map;
        Map<String, String> telefonnummern = new HashMap<>();

In Map<String, String> stehen zwei Typen: zuerst der Typ des Schlüssels, dann der Typ des Werts. Der Name ist ein String. Die Nummer auch, denn sie enthält einen Schrägstrich und beginnt mit 0; als Zahl ginge beides verloren.

Map ist ein Interface: Es legt nur fest, was eine Map können muss. Das Objekt kommt aus der Klasse HashMap, die das umsetzt. Beide stehen im Paket java.util und werden oben importiert.

Aus Vorlesung 7, Folie 16 („Beispiel für eine Map“): Map und HashMap kommen aus java.util. Mit new HashMap<>() entsteht eine leere Map; <> übernimmt die Typen von links.

Einträge mit put hinzufügen

        telefonnummern.put("Max", "0179/3045");        telefonnummern.put("Lisa", "06332/7778");        telefonnummern.put("Emilie", "07654/3214");        telefonnummern.put("Dennis", "0678/345");        telefonnummern.put("Tanja", "0543/876");        telefonnummern.put("Chris", "099889/345");
Schlüssel (Name)Wert (Nummer)
Max0179/3045
Lisa06332/7778
Emilie07654/3214
Dennis0678/345
Tanja0543/876
Chris099889/345

put(Schlüssel, Wert) trägt ein Paar ein. Nach den sechs Aufrufen enthält die Map sechs Paare. Die Reihenfolge spielt keine Rolle: Gesucht wird immer über den Namen, nie über eine Stelle wie bei einer Liste.

Aus Vorlesung 7, Folie 16 („Beispiel für eine Map“): put trägt ein Schlüssel-Wert-Paar ein. Gibt es den Schlüssel schon, ersetzt der neue Wert den alten (Folie 18).
Noch 4 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Das Programm Telefonverzeichnis

eine Map von Name zu Nummer

Abbildung 1Das Programm Telefonverzeichnis

eine Map von Name zu Nummer

import java.util.HashMap;import java.util.Map;import java.util.Scanner; public class Telefonverzeichnis {     public static void main(String[] args) {        Map<String, String> telefonnummern = new HashMap<>();        telefonnummern.put("Max", "0179/3045");        telefonnummern.put("Lisa", "06332/7778");        telefonnummern.put("Emilie", "07654/3214");        telefonnummern.put("Dennis", "0678/345");        telefonnummern.put("Tanja", "0543/876");        telefonnummern.put("Chris", "099889/345");         Scanner scanner = new Scanner(System.in);         while (true) {            System.out.print("Name oder \"Ende\": ");            String name = scanner.nextLine();            if (name.equals("Ende")) {                break;            }            if (telefonnummern.containsKey(name)) {                System.out.println("Telefonnummer: " + telefonnummern.get(name));            } else {                System.out.println("Der Name steht nicht im Verzeichnis.");            }        }        System.out.println("Tschüss!");    }}
LegendeDas ganze Programm.