15.2 Listen

Wird ein Array erzeugt, ist seine Größe ab diesem Zeitpunkt unveränderlich. Diese Einschränkung wird in bestimmten Fällen zu einem Problem.

Dies ist zum Beispiel der Fall, wenn zum Zeitpunkt, zu dem ein Array erzeugt werden soll, nicht klar ist, wie viele Objekte maximal verwaltet werden müssen. Die Größe des Arrays müsste dann über die Maßen groß gewählt werden, damit es nahezu ausgeschlossen ist, dass sie einmal nicht ausreicht. Dies führt jedoch dazu, dass das Array in der Regel nur zu einem geringen Teil ausgelastet ist und damit unnötig Speicherplatz reserviert.

Gleiches gilt für den Fall, dass sich eine maximale Größe zwar sinnvoll bestimmen lässt, jedoch vorhersehbar ist, dass die Auslastung stark schwanken wird.

Als Alternative zu einem Array bietet sich in diesen Fällen eine Liste an. Listen, auch Container oder Collection genannt, sind Objekte, die andere Objekte aufnehmen können. Die Liste kapselt diese Objekte und stellt für einen kontrollierten Zugriff darauf bestimmte öffentliche Methoden bereit.

Im Gegensatz zu einem Array wird bei der Erzeugung einer Liste deren Größe nicht fixiert. Stattdessen passt sie ihre Größe dynamisch an, wenn neue Elemente hinzukommen oder Elemente herausgenommen werden. Eine Liste besitzt daher auch keine "leeren" Plätze, ihre Größe entspricht immer der Anzahl der aktuell enthaltenen Elemente.

Ein weiterer Unterschied zu Arrays besteht darin, dass Listen in Java nur Objekte aufnehemen können, nicht jedoch Werte mit einem primitiven Typ wie int oder double.

In Java werden Listen in der Regel mit der Klasse ArrayList oder der Klasse LinkedList realisiert.

Merke: Listen

ArrayList

Beispielhaft erarbeiten wir im Folgenden, wie Listen in Java mit Hilfe der Klasse ArrayList realisiert werden können.

Grundsätzlich müssen die Objekte, die in eine ArrayList aufgenommen werden sollen, nicht die gleiche Klasse besitzen. Dies hat jedoch den Nachteil, dass in der Liste alle Objekte unter dem Typ Object, der gemeinsamen Oberklasse aller Objekte in Java, gespeichert werden. Deshalb ist beim Zugriff auf ein Objekt eine Typumwandlung notwendig, um das Objekt wieder in seine jeweilige Unterklasse zu überführen.

Eine ArrayList lässt sich jedoch wesentlich einfacher handhaben, wenn sie angewiesen wird, nur Objekte einer bestimmten Klasse aufzunehmen. Die ArrayList verwaltet die in ihr gespeicherten Objekte dann unter ihrer jeweiligen Klasse. Eine Typumwandlung ist damit nicht mehr erforderlich. Möglich wird dies, da Java in seiner aktuellen Version die Klasse ArrayList in Form einer generischen Klasse bereitstellt.

Im Quellcode generischer Klassen kann anstelle eines konkreten Typs ein Platzhalter (Typ-Parameter) verwendet werden. Wird die generische Klasse dann verwendet, muss angegeben werden, durch welchen konkreten Typ der Platzhalter sersetzt werden soll.

Generische Klassen besitzen dazu hinter ihrem Klassennamen einen in spitze Klammern eingeschlossenen Typ-Parameter. Wird eine generische Klasse verwendet, muss an dieser Stelle der Typ-Parameter durch den gewünschten Typ ersetzt werden. Als Typ sind dabei nur Klassen erlaubt, keine primitiven Datentypen!

Merke: Generische Klassen
img/Abb_15_14_ArrayList.svg
Abb. 15-14: Die generische Klasse ArrayList<E> (UML-Klassendiagramm)
Beispiel: Nutzung der generischen Klasse ArrayList<E>
  • Deklaration

    Bei der Deklaration einer Variablen vom Typ ArrayList<E> muss der Typ, den die aufzunehmenden Objekte besitzen müssen, anstelle des Typ-Paramteres E zwischen den spitzen Klammern angegeben werden.

    JAVA
    ArrayList<Auftrag> auftraege;
    Abb. 15-16: Deklaration einer ArrayList, die ausschließlich Objekte der Klasse Auftrag aufnehmen kann.
  • Erzeugung

    Wird eine Objekt der Klasse ArrayList<E> erzeugt, muss der Typ, den die aufzunehmenden Objekte besitzen müssen, anstelle des Typ-Paramteres E zwischen den spitzen Klammern angegeben werden.

    Eine neu erzeugte ArrayList enthält noch keine Elemente und besitzt daher die Größe 0.

    JAVA
    auftraege = new ArrayList<Auftrag>();
    Abb. 15-17: Eine neu erzeugte ArrayList, die ausschließlich Objekte der Klasse Auftrag aufnehmen kann, wird der Variablen auftraege zugewiesen.
  • Hinzufügen eines Elements

    Mit Hilfe der Methode +add(e: E): boolean können der jeweiligen ArrayList<E> Objekte vom Typ E hinzugefügt werden.

    JAVA
    auftraege.add(new Auftrag());
    Abb. 15-18: Der ArrayList<Auftrag> auftraege wird ein neues Objekt der Klasse Auftrag hinzugefügt.
  • Ersetzen eines Elements

    Mit Hilfe der Methode +set(index: int, element: E): E kann das Element mit dem Index index der jeweiligen ArrayList<E> durch das Objekt element ersetzt werden. Die Methode gibt als Antwort einen Verweis auf das entfernte Objekt zurück.

    JAVA
    auftraege.set(0, new Auftrag());
    Abb. 15-19: Das erste Element der ArrayList<Auftrag> auftraege wird durch ein neues Objekt der Klasse Auftrag ersetzt.
  • Zugriff auf ein bestimmtes Element

    Mit Hilfe der Methode +get(index: int): E kann auf das Element mit dem Index index der jeweiligen ArrayList<E> zugegriffen werden.

    JAVA
    Auftrag ersterAuftrag = auftraege.get(0);
    Abb. 15-20: Das erste Element der ArrayList<Auftrag> auftraege wird der lokalen Variable ersterAuftrag zugewiesen.
  • Entfernen eines Elements

    Mit Hilfe der Methode +remove(index: int): E kann das Element mit dem Index index aus der jeweiligen ArrayList<E> entfernt werden. Die Methode gibt als Antwort einen Verweis auf das entfernte Objekt zurück.

    Alternativ kann auch die Methode +remove(o: Object): boolean genutzt werden, um das Objekt o aus der jeweiligen ArrayList<E> zu entfernen. Wenn die ArrayList das zu entfernende Objekt enthielt, gibt die Methode true, andernfalls false zurück.

    JAVA
    Auftrag entfernterAuftrag = auftraege.remove(0);
    Abb. 15-21: Aus der ArrayList<Auftrag> auftraege wird das erste Element entfernt.
    JAVA
    boolean entfernt = auftraege.remove(ersterAuftrag);
    Abb. 15-22: Enthält die ArrayList<Auftrag> auftraege das Objekt ersterAuftrag wird dieses aus ihr entfernt.
  • Ermittlung der Größe

    Die öffentliche Methode +size(): int gibt die Anzahl der Elemente in der ArrayList zurück.

    JAVA
    int anzahl = auftraege.size();
    Abb. 15-23: Rückgabe der Anzahl der in der ArrayList<Auftrag> auftraege enthaltenen Elemente.
Aufgabe

Aufgabe 15-4: Kurierdienst II

Die in Aufgabe 15-3 geltende Einschränkung, dass jeder Kunde lediglich bis zu dreißig Aufträge erteilen kann, heben wir nun auf. Es soll nun möglich sein, jedem Kunden beliebig viele Aufträge zuweisen zu können.

img/Abb_15_24_UML_KurierdienstII.svg
Abb. 15-24: Kurierdienst (UML-Klassendiagramm)
Aufgaben
  1. Erstellen Sie auf Grundlage des abgebildeten UML-Klassendiagramms (vgl. Abb. 15-24) den Quellcode der Klasse Kunde. Lösung
    Lösung
    JAVA
    import java.util.ArrayList;

    public class Kunde {
         
        private String firma;
        private ArrayList<Auftrag> auftraege = new ArrayList<Auftrag>();
        private Adresse anschrift;
        
        public String getFirma() {
            return firma;
        }
        
        public void setFirma(String firma) {
            this.firma = firma;
        }
        
        public Adresse getAnschrift() {
            return anschrift;
        }
        
        public void setAnschrift(Adresse anschrift) {
            this.anschrift = anschrift;
        }

        public void addAuftrag(Auftrag pAuftrag){
            auftraege.add(pAuftrag);
        }

        public Auftrag getAuftrag(int pIndex){
            return auftraege.get(pIndex);
        }

        public void setAuftrag(int pIndex, Auftrag pAuftrag){
            auftraege.set(pIndex, pAuftrag);
        }

        public void removeAuftrag(int pIndex){
            auftraege.remove(pIndex);
        }

        public void removeAuftrag(Auftrag pAuftrag){
            auftraege.remove(pAuftrag);
        }

        public int ermittleAnzahlAuftraege(){
            return auftraege.size();
        }

    }
    Abb. 15-25: Klasse Kunde (Quellcode)
  2. Erstellen Sie eine Testklasse, in deren main-Methode die folgenden Anweisungen ausgeführt werden:
    1. Erzeugen Sie drei Objekte der Klasse Auftrag mit den Auftragsnummern „A1“, „A2“ und „A3“.
    2. Erzeugen Sie ein Objekt der Klasse Kunde und weisen Sie diesem die Aufträge mit den Auftragsnummern „A1“, „A2“ und „A3“ zu.
    3. Fragen Sie mit Hilfe einer Schleife alle dem Kunden zugewiesenen Aufträge ab und geben Sie dabei von jedem Auftrag Index und Auftragsnummer auf der Konsole aus.
    4. Geben Sie den Text „Erster Auftrag wird gelöscht!“ auf der Konsole aus und entfernen Sie den Auftrag mit dem Index 0 aus der Auftragsliste des Kunden. Fragen Sie anschließend mit Hilfe einer Schleife alle dem Kunden zugewiesenen Aufträge ab und geben Sie dabei von jedem Auftrag Index und Auftragsnummer auf der Konsole aus.
    5. Geben Sie den Text „Das Auftragsobjekt a2 wird gelöscht!“ auf der Konsole aus und entfernen Sie das Auftragsobjekt mit der Auftragsnummer „A1“ aus der Auftragsliste des Kunden. Fragen Sie anschließend mit Hilfe einer Schleife alle dem Kunden zugewiesenen Aufträge ab und geben Sie dabei von jedem Auftrag Index und Auftragsnummer auf der Konsole aus.
    6. Geben Sie die Auftragsnummer des Auftrags mit dem Index 0 auf der Konsole aus. Ersetzen Sie dann das Auftragsobjekt mit dem Index 0 durch das Auftragsobjekt mit der Auftragsnummer „A1“. Geben Sie nach der Änderung die Auftragsnummer des Auftrags mit dem Index 0 auf der Konsole aus.

    Lösung

    Lösung
    JAVA
    public class Test {

        public static void main(String[] args) {
            //Teilaufgabe b. 1.
            Auftrag a1 = new Auftrag("A1");
            Auftrag a2 = new Auftrag("A2");
            Auftrag a3 = new Auftrag("A3");

            //Teilaufgabe b. 2.
            Kunde k = new Kunde();
            k.addAuftrag(a1);
            k.addAuftrag(a2);
            k.addAuftrag(a3);

            //Teilaufgabe b. 3.
            System.out.println("Teilaufgabe b. 3.");
            System.out.println("Liste aller Aufträge des Kunden:");
            for(int i=0; i<k.ermittleAnzahlAuftraege(); i++) {
                System.out.println(" -Index " + i + ": " + k.getAuftrag(i).getAuftragsnummer());
            }
            System.out.println();

            //Teilaufgabe b. 4.
            System.out.println("Teilaufgabe b. 4.");
            System.out.println("Erster Auftrag wird gelöscht!");
            k.removeAuftrag(0);
            System.out.println("Liste aller Aufträge des Kunden:");
            for(int i=0; i<k.ermittleAnzahlAuftraege(); i++) {
                System.out.println(" -Index " + i + ": " + k.getAuftrag(i).getAuftragsnummer());
            }
            System.out.println();

            //Teilaufgabe b. 5.
            System.out.println("Teilaufgabe b. 5.");
            System.out.println("Der Auftrag A2 wird gelöscht!");
            k.removeAuftrag(a2);
            System.out.println("Liste aller Aufträge des Kunden:");
            for(int i=0; i<k.ermittleAnzahlAuftraege(); i++) {
                System.out.println(" -Index " + i + ": " + k.getAuftrag(i).getAuftragsnummer());
            }
            System.out.println();
            
            //Teilaufgabe b. 6.
            System.out.println("Teilaufgabe b. 6.");
            System.out.println("bisher: Index 0: " + k.getAuftrag(0).getAuftragsnummer());
            k.setAuftrag(0, a1);
            System.out.println("nachher: Index 0: " + k.getAuftrag(0).getAuftragsnummer());
            System.out.println();
            
        }
    }
    Abb. 15-26: Klasse Test (Quellcode)
Aufgabe

Aufgabe 15-5: Rechnungsstellung

Die ABC-GmbH erstellt für Ihre Privatkunden Rechnungen entsprechend der in Abbildung 15-27 zu sehenden Beispielrechnung

Beispiel
img/Abb_15_27_Rechnung.svg
Abb. 15-27: Rechnung
Aufgaben
  1. Erstellen Sie auf Grundlage der abgebildeten Beispielrechnung (vgl. Abb. 15-27) ein UML-Klassendiagramm. Berücksichtigen Sie dabei, dass eine Rechnung beliebig viele Rechnungspositionen enthalten kann.
    Vereinfachend können Sie auf die Angabe der set- und get-Methoden verzichten. Methoden, die den Zugriff auf eine Liste erlauben, sowie Methoden, die für die Aufgabe relevante Werte berechnen, sind jedoch anzugeben.

    Lösung

    Lösung
    img/Abb_15_28_UML_Rechnungsstellung.svg
    Abb. 15-28: Rechnungsstellung (UML-Klassendiagramm)
  2. Erstellen Sie den Quellcode der in Teilaufgabe a) modellierten Klassen. Lösung
    Lösung
    JAVA
    import java.util.ArrayList;
    import java.time.LocalDate;

    public class Rechnung {

        private String nummer;
        private LocalDate datum;
        private Kunde kunde;
        private ArrayList<Rechnungsposition> positionen = new ArrayList<Rechnungsposition>();
        
        public String getNummer() {
            return nummer;
        }
        
        public void setNummer(String pNummer) {
            this.nummer = pNummer;
        }
        
        public LocalDate getDatum() {
            return datum;
        }
        
        public void setDatum(LocalDate pDatum) {
            this.datum = pDatum;
        }
        
        public Kunde getKunde() {
            return kunde;
        }
        
        public void setKunde(Kunde pKunde) {
            this.kunde = pKunde;
        }
        
        public void addPosition(Rechnungsposition pPosition){
            positionen.add(pPosition);
        }

        public Rechnungsposition getPosition(int pIndex){
            return positionen.get(pIndex);
        }

        public void setPosition(int pIndex, Rechnungsposition pPosition){
            positionen.set(pIndex, pPosition);
        }

        public void removePosition(int pIndex){
            positionen.remove(pIndex);
        }

        public void removePosition(Rechnungsposition pPosition){
            positionen.remove(pPosition);
        }

        public int ermittleAnzahlAuftraege(){
            return positionen.size();
        }

        public double berechneRechnungsbetrag(){
            double summe = 0;
            
            for(int i=0; i<positionen.size(); i++) {
                summe = summe + positionen.get(i).berechneGesamtpreis();
            }
            
            return summe;
        }

        public double berechneMwSt() {
            return 0.19 * (berechneRechnungsbetrag()/1.19);
        }

    }
    Abb. 15-29: Klasse Rechnung (Quellcode)
    JAVA

    public class Rechnungsposition {
        private Artikel artikel;
        private int menge;
        private double einzelpreis;
        
        public Artikel getArtikel() {
            return artikel;
        }
        
        public void setArtikel(Artikel pArtikel) {
            this.artikel = pArtikel;
            this.einzelpreis = pArtikel.getVerkaufspreis();
        }
        
        public int getMenge() {
            return menge;
        }
        
        public void setMenge(int pMenge) {
            this.menge = pMenge;
        }
        
        public double getEinzelpreis() {
            return einzelpreis;
        }
        
        public void setEinzelpreis(double pEinzelpreis) {
            this.einzelpreis = pEinzelpreis;
        }
        
        public double berechneGesamtpreis() {
            return einzelpreis * menge;
        }
        
    }
    Abb. 15-30: Klasse Rechnungsposition (Quellcode)
    JAVA
    public class Artikel {
        
        private int nummer;
        private String bezeichnung;
        private double verkaufspreis;
        
        public int getNummer() {
            return nummer;
        }
        
        public void setNummer(int pNummer) {
            this.nummer = pNummer;
        }
        
        public String getBezeichnung() {
            return bezeichnung;
        }
        
        public void setBezeichnung(String pBezeichnung) {
            this.bezeichnung = pBezeichnung;
        }
        
        public double getVerkaufspreis() {
            return verkaufspreis;
        }
        
        public void setVerkaufspreis(double pVerkaufspreis) {
            this.verkaufspreis = pVerkaufspreis;
        }
        
    }
    Abb. 15-31: Klasse Artikel (Quellcode)
    JAVA
    import java.util.ArrayList;

    public class Kunde {
         
        private String nummer;
        private String vorname;
        private String nachname;
        private Anschrift anschrift;
        
        public String getNummer() {
            return nummer;
        }
        
        public void setNummer(String pNummer) {
            this.nummer = pNummer;
        }
        
        public String getVorname() {
            return vorname;
        }
        
        public void setVorname(String pVorname) {
            this.vorname = pVorname;
        }
        
        public String getNachname() {
            return nachname;
        }
        
        public void setNachname(String pNachname) {
            this.nachname = pNachname;
        }
        
        public Anschrift getAnschrift() {
            return anschrift;
        }
        
        public void setAnschrift(Anschrift pAnschrift) {
            this.anschrift = pAnschrift;
        }
        
    }
    Abb. 15-32: Klasse Kunde (Quellcode)
    JAVA
    public class Anschrift {
        
        private String strasse;
        private String hausnummer;
        private String postleitzahl;
        private String ort;
        
        public String getStrasse() {
            return strasse;
        }
        
        public void setStrasse(String strasse) {
            this.strasse = strasse;
        }
        
        public String getHausnummer() {
            return hausnummer;
        }
        
        public void setHausnummer(String hausnummer) {
            this.hausnummer = hausnummer;
        }
        
        public String getPostleitzahl() {
            return postleitzahl;
        }
        
        public void setPostleitzahl(String postleitzahl) {
            this.postleitzahl = postleitzahl;
        }
        
        public String getOrt() {
            return ort;
        }
        
        public void setOrt(String ort) {
            this.ort = ort;
        }
        
    }
    Abb. 15-33: Klasse Anschrift (Quellcode)
  3. Testen Sie Ihr Programm, indem Sie in der main-Methode einer Testklasse die im folgenden UML-Objektdiagramm (vgl. Abb. 15-34) dargestellten Objekte erzeugen. Lassen Sie anschließend den Rechnungsbetrag sowie die darin enthaltene Mehrwertsteuer auf der Konsole ausgeben.

    img/Abb_15_34_UML_Objektdiagramm_Rechnung.svg
    Abb. 15-34: Rechnungsstellung (UML-Objektdiagramm)
    Lösung
    Lösung
    JAVA
    public class Test {

        public static void main(String[] args) {
            Rechnung rechnung = new Rechnung();
            Rechnungsposition position1 = new Rechnungsposition();
            Rechnungsposition position2 = new Rechnungsposition();
            Artikel artikel1 = new Artikel();
            Artikel artikel2 = new Artikel();
            
            artikel1.setNummer(11076);
            artikel1.setBezeichnung("Bügelschloss");
            artikel1.setVerkaufspreis(10.0);
                
            artikel2.setNummer(92741);
            artikel2.setBezeichnung("Rucksack Alpin");
            artikel2.setVerkaufspreis(150.0);
            
            position1.setMenge(2);
            position1.setArtikel(artikel1);
            
            position2.setMenge(1);
            position2.setArtikel(artikel2);
            
            rechnung.setNummer("H05866-15");
            rechnung.addPosition(position1);
            rechnung.addPosition(position2);
            
            System.out.println(rechnung.berechneRechnungsbetrag());
            System.out.println(rechnung.berechneMwSt());
        }

    }
    Abb. 15-35: Klasse Test (Quellcode)
Aufgabe

Aufgabe 15-6: Kundenumsätze analysieren

Ein Unternehmen möchte wissen, wie hoch seine Umsätze mit Kunden aus einem bestimmten Postleitzahlbereich sind.

Aufgaben
  1. Erstellen Sie die Klasse Kunde, die vereinfachend nur über die Attribute postleitzahl vom Typ String und umsatz vom Typ double sowie entsprechende set- und get-Methoden verfügt. Lösung
    Lösung
    JAVA
    public class Kunde {
        
        private String postleitzahl;
        private double umsatz;
            
        public String getPostleitzahl() {
            return postleitzahl;
        }

        public void setPostleitzahl(String pPostleitzahl) {
            this.postleitzahl = pPostleitzahl;
        }

        public double getUmsatz() {
            return umsatz;
        }
        
        public void setUmsatz(double pUmsatz) {
            this.umsatz = pUmsatz;
        }

    }
    Abb. 15-36: Klasse Kunde (Quellcode)
  2. Erstellen Sie eine Klasse Kundenverwaltung, die das Attribut kundenliste besitzt, das beliebig viele Objekte der Klasse Kunde aufnehmen kann. Fügen Sie außerdem die Methode addKunde(pKunde: Kunde) hinzu, die das Objekt pKunde an die kundenliste anfügt. Weitere Zugriffsmethoden sind nicht erforderlich. Lösung
    Lösung
    JAVA
    import java.util.ArrayList;

    public class Kundenverwaltung {
        
        private ArrayList<Kunde> kundenliste = new ArrayList<Kunde>();

        public void addKunde(Kunde pKunde) {
            kundenliste.add(pKunde);
        }

    }
    Abb. 15-37: Klasse Kundenverwaltung (Quellcode)
  3. Erstellen Sie in der Klasse Kundenverwaltung die Methode ermittleUmsatz(pPostleitzahl: String): double, die den Umsatz ermittelt, der mit Kunden aus dem Postleitzahlbereich pPostleitzahl erzielt wurde. Lösung
    Lösung
    JAVA
    import java.util.ArrayList;

    public class Kundenverwaltung {
        
        private ArrayList<Kunde> kundenliste = new ArrayList<Kunde>();

        public void addKunde(Kunde pKunde) {
            kundenliste.add(pKunde);
        }
        
        public double ermittleUmsatz(String pPostleitzahl) {
            double summe = 0;
            Kunde kunde;
            
            for(int i=0; i<kundenliste.size(); i++){
                kunde = kundenliste.get(i);
                if(kunde.getPostleitzahl().equals(pPostleitzahl)){
                    summe = summe + kunde.getUmsatz();
                }
            }
                    
            return summe;
        }

    }
    Abb. 15-38: Klasse Kundenverwaltung (Quellcode)
  4. Passen Sie die Methode ermittleUmsatz(pPostleitzahl: String): double so an, dass neben einer kompletten Postleitzahl (z. B. 97941) auch nur ein die ersten Stellen (z. B. 97 oder 979) übergeben werden können, um so mehrere Postleitzahlbereiche auszuwählen. Lösung
    Lösung
    JAVA
    import java.util.ArrayList;

    public class Kundenverwaltung {
        
        private ArrayList<Kunde> kundenliste = new ArrayList<Kunde>();

        public void addKunde(Kunde pKunde) {
            kundenliste.add(pKunde);
        }
        
        public double ermittleUmsatz(String pPostleitzahl) {
            double summe = 0;
            Kunde kunde;
            
            for(int i=0; i<kundenliste.size(); i++){
                kunde = kundenliste.get(i);
                if(kunde.getPostleitzahl().substring(0, pPostleitzahl.length()).equals(pPostleitzahl)){
                    summe = summe + kunde.getUmsatz();
                }
            }
                    
            return summe;
        }

    }
    Abb. 15-39: Klasse Kundenverwaltung (Quellcode)
  5. Erstellen Sie eine Testklasse, in deren main-Methode folgende Anforderungen umgesetzt sind:
    • Erzeugen Sie ein Objekt der Klasse Kundenverwaltung namens kundenverwaltung.
    • Erzeugen Sie die drei Kunden-Objekte
      • k1 (Postleitzahl 97941, Umsatz 2000),
      • k2 (Postleitzahl 97941, Umsatz 4000) und
      • k3 (Postleitzahl 70173, Umsatz 6000).
    • Fügen Sie die drei Kunden-Objekte k1, k2 und k3 dem Attribut kundenliste des Objekts kundenverwaltung hinzu.
    • Rufen Sie die Methode ermittleUmsatz(pPostleitzahl: String): double des Objekts kundenverwaltung auf, übergeben Sie als Parameter den String "97" und geben Sie die Antwort auf der Konsole aus.
    Lösung
    Lösung
    JAVA
    public class Test {
        
        public static void main(String[] args) {
            Kundenverwaltung kundenverwaltung = new Kundenverwaltung();
            Kunde k1 = new Kunde();
            Kunde k2 = new Kunde();
            Kunde k3 = new Kunde();
            
            k1.setPostleitzahl("97941");
            k2.setPostleitzahl("97941");
            k3.setPostleitzahl("70173");
            
            k1.setUmsatz(2000);
            k2.setUmsatz(4000);
            k3.setUmsatz(6000);
            
            kundenverwaltung.addKunde(k1);
            kundenverwaltung.addKunde(k2);
            kundenverwaltung.addKunde(k3);

            System.out.println(kundenverwaltung.ermittleUmsatz("97"));
        }
    }
    Abb. 15-40: Klasse Test (Quellcode)
Hinweis

Bei Teilaufgabe d) können je nach Lösungsweg folgende Methoden der Klasse String hilfreich sein:

  • Die Methode substring(beginIndex: int, endIndex: int): String liefert den Teil des jeweiligen Strings zurück, der mit dem Zeichen an Position (Index) beginIndex beginnt und mit dem Zeichen vor Position endIndex endet. Das erste Zeichen eines Strings hat den Index 0.
  • Die Methode length(): int gibt die Länge des jeweiligen Strings zurück. Dazu ermittelt sie, aus wie vielen Zeichen der String besteht.