Part 6

Objekte in einer Liste und eine Liste als Teil eines Objekts

Hinweis: Bitte beachten Sie, dass die Vorlesungen ergänzende Inhalte und besondere Schwerpunkte bieten, die über den Text dieser Webseite hinausgehen. Obwohl die Webseite ausführliche Informationen bereitstellt, werden in der Vorlesung spezielle Themen vertieft behandelt und zusätzliche Einblicke gegeben. Um ein umfassendes Verständnis des Stoffes zu erlangen und die in der Vorlesung besprochenen Aspekte vollständig zu erfassen, empfehlen wir Ihnen insbesondere, an den Vorlesungen teilzunehmen.

Als nächstes schauen wir uns Objekte an, die eine Liste enthalten. Beispiele für solche Objekte sind zum Beispiel die Elemente einer Playlist.

Im folgenden Beispiel haben wir eine Klasse für das Konzept einer Playlist erstellt. Die Playlist enthält Songs: Songs können hinzugefügt, entfernt und die in der Playlist enthaltenen Songs können ausgegeben werden.

// imports

public class Playlist {
    private ArrayList<String> songs;

    public Playlist() {
        this.songs = new ArrayList<>();
    }

    public void addSong(String song) {
        this.songs.add(song);
    }

    public void removeSong(String song) {
        this.songs.remove(song);
    }

    public void printSongs() {
        for (String song: this.songs) {
            System.out.println(song);
        }
    }
}

Das Erstellen von Playlists ist mit Hilfe der oben genannten Klasse einfach.

Playlist list = new Playlist();
list.addSong("The Neglected Garden, Cecilie Corbel");
list.addSong("C.R.E.A.M, Wu-Tang Clan");
list.printSongs();
Beispielausgabe

The Neglected Garden, Cecilie Corbel C.R.E.A.M, Wu-Tang Clan

Loading
Loading

Objekte in einer Instanzvariablen-Liste

Eine Liste, die eine Instanzvariable eines Objekts ist, kann andere Objekte als Strings enthalten, solange der Objekttyp in der Liste beim Definieren der Liste spezifiziert wird.

Im vorherigen Abschnitt haben wir eine Klasse namens AmusementParkRide erstellt, die verwendet wurde, um zu prüfen, ob eine Person die Voraussetzungen erfüllt, um eine bestimmte Fahrt zu nutzen. Die AmusementParkRide-Klasse sieht wie folgt aus.

public class AmusementParkRide {
    private String name;
    private int minimumHeight;
    private int visitors;

    public AmusementParkRide(String name, int minimumHeight) {
        this.name = name;
        this.minimumHeight = minimumHeight;
        this.visitors = 0;
    }

    public boolean isAllowedOn(Person person) {
        if (person.getHeight() < this.minimumHeight) {
            return false;
        }

        this.visitors++;
        return true;
    }

    public String toString() {
        return this.name + ", Mindestgrößenanforderung: " + this.minimumHeight +
            ", Besucher: " + this.visitors;
    }
}

Wir erweitern die Klasse so, dass der Freizeitpark die Personen auf der Fahrt erfasst. In dieser Version hat die Fahrt als Instanzvariable eine Liste der Personen, die auf die Fahrt gelassen wurden. Die Liste wird im Konstruktor erstellt.

public class AmusementParkRide {
    private String name;
    private int minimumHeigth;
    private int visitors;
    private ArrayList<Person> riding;

    public AmusementParkRide(String name, int minimumHeigth) {
        this.name = name;
        this.minimumHeigth = minimumHeigth;
        this.visitors = 0;
        this.riding = new ArrayList<>();
    }

    // ..
}

Lassen Sie uns die Methode isAllowedOn ändern. Die Methode fügt der Liste alle Personen hinzu, die die Größenanforderungen erfüllen.

public class AmusementParkRide {
    private String name;
    private int minimumHeight;
    private int visitors;
    private ArrayList<Person> riding;

    public AmusementParkRide(String name, int minimumHeight) {
        this.name = name;
        this.minimumHeight = minimumHeight;
        this.visitors = 0;
        this.riding = new ArrayList<>();
    }

    public boolean isAllowedOn(Person person) {
        if (person.getHeight() < this.minimumHeight) {
            return false;
        }

        this.visitors++;
        this.riding.add(person);
        return true;
    }

    public String toString() {
        return this.name + ", Mindestgrößenanforderung: " + this.minimumHeight +
            ", Besucher: " + this.visitors;
    }
}
Loading

Ausgabe eines Objekts aus einer Liste

Lassen Sie uns nun die toString-Methode so ändern, dass der von der Methode zurückgegebene String den Namen jeder Person enthält, die sich auf der Fahrt befindet.

public class AmusementParkRide {
    private String name;
    private int minimumHeight;
    private int visitors;
    private ArrayList<Person> riding;

    // ...

    public String toString() {
        // wir bilden einen String aus allen Personen auf der Liste
        String onTheRide = "";
        for (Person person: riding) {
            onTheRide = onTheRide + person.getName() + "\n";
        }

        // wir geben einen String zurück, der das Objekt beschreibt
        // einschließlich der Namen der Personen auf der Fahrt
        return this.name + ", Mindestgrößenanforderung: " + this.minimumHeight +
            ", Besucher: " + this.visitors + "\n" +
            "auf der Fahrt:\n" + onTheRide;
    }
}

Lassen Sie uns die erweiterte Freizeitparkfahrt testen:

Person matti = new Person("Matti");
matti.setWeigth(86);
matti.setHeight(180);

Person juhana = new Person("Juhana");
juhana.setWeigth(34);
juhana.setHeight(132);

AmusementParkRide hurjakuru = new AmusementParkRide("Hurjakuru", 140);
System.out.println(hurjakuru);

System.out.println();

if (hurjakuru.isAllowedOn(matti)) {
    System.out.println(matti.getName() + " darf auf die Fahrt");
} else {
    System.out.println(matti.getName() + " darf nicht auf die Fahrt");
}

if (hurjakuru.isAllowedOn(juhana)) {
    System.out.println(juhana.getName() + " darf auf die Fahrt");
} else {
    System.out.println(juhana.getName() + " darf nicht auf die Fahrt");
}

System.out.println(hurjakuru);

Die Ausgabe des Programms ist:

Beispielausgabe

Hurjakuru, Mindestgrößenanforderung: 140, Besucher: 0 auf der Fahrt:

Matti darf auf die Fahrt Juhana darf nicht auf die Fahrt Hurjakuru, Mindestgrößenanforderung: 140, Besucher: 1 auf der Fahrt: Matti

Obwohl sich niemand auf der Fahrt befindet, wird der String auf der Fahrt: in der Ausgabe angezeigt. Lassen Sie uns die toString-Methode so ändern, dass, wenn sich niemand auf der Fahrt befindet, der von der Methode zurückgegebene String dies angibt.

public class AmusementParkRide {
    private String name;
    private int minimumHeight;
    private int visitors;
    private ArrayList<Person> riding;

    public AmusementParkRide(String name, int minimumHeight) {
        this.name = name;
        this.minimumHeight = minimumHeight;
        this.visitors = 0;
        this.riding = new ArrayList<>();
    }

    // ...

    public String toString() {

        String printOutput = this.name + ", Mindestgrößenanforderung: " + this.minimumHeight +
            ", Besucher: " + this.visitors + "\n";

        if (riding.isEmpty()) {
            return printOutput + "niemand ist auf der Fahrt.";
        }

        // wir bilden einen String aus den Personen auf der Liste
        String peopleOnRide = "";

        for (Person person: riding) {
            peopleOnRide = peopleOnRide + person.getName() + "\n";
        }

        return printOutput + "\n" +
            "auf der Fahrt:\n" + peopleOnRide;
    }
}

Die Druckausgabe wurde nun verbessert.

Person matti = new Person("Matti");
matti.setWeight(86);
matti.setHeight(180);

Person juhana = new Person("Juhana");
juhana.setWeight(34);
juhana.setHeight(132);

AmusementParkRide hurjakuru = new AmusementParkRide("Hurjakuru", 140);
System.out.println(hurjakuru);

System.out.println();

if (hurjakuru.isAllowedOn(matti)) {
    System.out.println(matti.getName() + " darf auf die Fahrt");
} else {
    System.out.println(matti.getName() + " darf nicht auf die Fahrt");
}

if (hurjakuru.isAllowedOn(juhana)) {
    System.out.println(juhana.getName() + " darf auf die Fahrt");
} else {
    System.out.println(juhana.getName() + " darf nicht auf die Fahrt");
}

System.out.println(hurjakuru);

Die Ausgabe des Programms ist:

Beispielausgabe

Hurjakuru, Mindestgrößenanforderung: 140, Besucher: 0 niemand ist auf der Fahrt.

Matti darf auf die Fahrt Juhana darf nicht auf die Fahrt Hurjakuru, Mindestgrößenanforderung: 140, Besucher: 1 auf der Fahrt: Matti

Loading

Leeren einer Liste eines Objekts

Wir fügen nun eine removeEveryoneOnRide-Methode zur Freizeitparkfahrt hinzu, die alle Personen auf der Fahrt entfernt. Die Listenmethode clear ist hier sehr nützlich.

public class AmusementParkRide {
    // ..

    public void removeEveryoneOnRide() {
        this.riding.clear();
    }

    // ..
}
Person matti = new Person("Matti");
matti.setWeight(86);
matti.setHeight(180);

Person juhana = new Person("Juhana");
juhana.setWeight(34);
juhana.setHeight(132);

AmusementParkRide hurjakuru = new AmusementParkRide("Hurjakuru", 140);
System.out.println(hurjakuru);

System.out.println();

if (hurjakuru.isAllowedOn(matti)) {
    System.out.println(matti.getName() + " darf auf die Fahrt");
} else {
    System.out.println(matti.getName() + " darf nicht auf die Fahrt");
}

if (hurjakuru.isAllowedOn(juhana)) {
    System.out.println(juhana.getName() + " darf auf die Fahrt");
} else {
    System.out.println(juhana.getName() + " darf nicht auf die Fahrt");
}

System.out.println(hurjakuru);

hurjakuru.removeEveryoneOnRide();

System.out.println();
System.out.println(hurjakuru);

Die Ausgabe des Programms ist:

Beispielausgabe

Hurjakuru, Mindestgrößenanforderung: 140, Besucher: 0 niemand ist auf der Fahrt.

Matti darf auf die Fahrt Juhana darf nicht auf die Fahrt Hurjakuru, Mindestgrößenanforderung: 140, Besucher: 1 auf der Fahrt: Matti

Hurjakuru, Mindestgrößenanforderung: 140, Besucher: 1 niemand ist auf der Fahrt.

Berechnung einer Summe aus Objekten auf einer Liste

Lassen Sie uns nun eine Methode für die Freizeitparkfahrt erstellen, die die Durchschnittsgröße der Personen auf der Fahrt berechnet. Die Durchschnittsgröße kann berechnet werden, indem der Durchschnitt aus den Personen auf der Fahrt berechnet wird - der Durchschnitt wird berechnet, indem die individuellen Werte addiert und diese Summe durch die Anzahl der Werte geteilt wird.

Die folgende Implementierung gibt -1 zurück, wenn sich keine einzige Person auf der Fahrt befindet. Das Ergebnis von -1 ist in einem Programm, das Durchschnittswerte berechnet, unmöglich. Daraus lässt sich schließen, dass der Durchschnitt nicht berechnet werden konnte.

public class AmusementParkRide {
    private String name;
    private int minimumHeight;
    private int visitors;
    private ArrayList<Person> riding;

    // ..

    public double averageHeightOfPeopleOnRide() {
        if (riding.isEmpty()) {
            return -1;
        }

        int sumOfHeights = 0;
        for (Person per: riding) {
            sumOfHeights += per.getHeight();
        }

        return 1.0 * sumOfHeights / riding.size();
    }

    // ..
}
Person matti = new Person("Matti");
matti.setHeight(180);

Person juhana = new Person("Juhana");
juhana.setHeight(132);

Person awak = new Person("Awak");
awak.setHeight(194);

AmusementParkRide hurjakuru = new AmusementParkRide("Hurjakuru", 140);

hurjakuru.isAllowedOn(matti);
hurjakuru.isAllowedOn(juhana);
hurjakuru.isAllowedOn(awak);

System.out.println(hurjakuru);
System.out.println(hurjakuru.averageHeightOfPeopleOnRide());

Die Ausgabe des Programms ist:

Beispielausgabe

Hurjakuru, Mindestgrößenanforderung: 140, Besucher: 2 auf der Fahrt: Matti Awak 187.0

Loading

Abrufen eines bestimmten Objekts aus einer Liste

Wir erstellen jetzt eine Methode für die Freizeitparkfahrt, die die größte Person auf der Fahrt zurückgibt. Die Methode sollte also sowohl die größte Person aus der Liste abrufen als auch zurückgeben.

Methoden, die Objekte aus einer Liste abrufen, sollten auf folgende Weise implementiert werden. Zuerst überprüfen wir, ob die Liste leer ist - wenn ja, geben wir eine null-Referenz oder einen anderen Wert zurück, der anzeigt, dass die Liste keine Werte hatte. Danach erstellen wir eine Objektreferenzvariable, die das zurückzugebende Objekt beschreibt. Wir setzen den Wert des ersten Objekts auf der Liste. Dann gehen wir die Werte auf der Liste durch, indem wir jedes Listenobjekt mit der Objektvariable vergleichen, die das zurückzugebende Objekt darstellt. Wenn der Vergleich ein besser passendes Objekt findet, wird es der Objektreferenzvariablen zugewiesen, die zurückgegeben werden soll. Schließlich geben wir die Objektvariable zurück, die das zurückzugebende Objekt beschreibt.

public Person getTallest() {
    // geben Sie eine null-Referenz zurück, wenn niemand auf der Fahrt ist
    if (this.riding.isEmpty()) {
        return null;
    }

    // erstellen Sie eine Objektreferenz für das zurückzugebende Objekt
    // der erste Wert ist das erste Objekt auf der Liste
    Person returnObject = this.riding.get(0);

    // durchlaufen Sie die Liste
    for (Person prs: this.riding) {
        // vergleichen Sie jedes Objekt auf der Liste
        // mit dem returnObject -- wir vergleichen die Größe
        // da wir nach der größten Person suchen,

        if (returnObject.getHeight() < prs.getHeight()) {
            // wenn wir in der Vergleichung eine größere Person finden,
            // wird sie als Wert des returnObject gesetzt
            returnObject = prs;
        }
    }

    // schließlich wird die Objektreferenz zurückgegeben,
    // die das zurückzugebende Objekt beschreibt
    return returnObject;
}

Das Finden der größten Person ist jetzt einfach.

Person matti = new Person("Matti");
matti.setHeight(180);

Person juhana = new Person("Juhana");
juhana.setHeight(132);

Person awak = new Person("Awak");
awak.setHeight(194);

AmusementParkRide hurjakuru = new AmusementParkRide("Hurjakuru", 140);

hurjakuru.isAllowedOn(matti);
hurjakuru.isAllowedOn(juhana);
hurjakuru.isAllowedOn(awak);

System.out.println(hurjakuru);
System.out.println(hurjakuru.averageHeightOfPeopleOnRide());

System.out.println();
System.out.println(hurjakuru.getTallest().getName());
Person tallest = hurjakuru.getTallest();
System.out.println(tallest.getName());
Beispielausgabe

Hurjakuru, Mindestgrößenanforderung: 140, Besucher: 2 auf der Fahrt: Matti Awak 187.0

Awak Awak

Loading
Loading
Loading
Sie haben das Ende dieses Abschnitts erreicht! Weiter zum nächsten Abschnitt: