CS_LEVEL_7_SOLUTION - OnlyCook/abitur-elite-code GitHub Wiki

Level 7 – Musterlösung: Die Inventur (Filtern)

Lösung

public class Lager
{
    private List<Paket> pakete;
 
    public Lager()
    {
        this.pakete = new List<Paket>();
    }
 
    public void Hinzufuegen(Paket p)
    {
        pakete.Add(p);
    }
 
    public List<Paket> FilterePakete(string ort)
    {
        List<Paket> gefiltert = new List<Paket>();
 
        foreach (Paket p in pakete)
        {
            if (p.GetZielort() == ort && p.GetGewicht() > 10.0)
            {
                gefiltert.Add(p);
            }
        }
 
        return gefiltert;
    }
}

Erklärung

Eine neue Liste aufbauen

Das Ziel der Methode ist es, eine gefilterte Teilliste zurückzugeben – die ursprüngliche Liste pakete bleibt dabei unverändert. Deshalb wird zu Beginn eine neue, leere Liste angelegt:

List<Paket> gefiltert = new List<Paket>();

Am Ende wird diese neue Liste zurückgegeben. return null aus dem Startercode muss also durch return gefiltert ersetzt werden.

Die Filterbedingung mit &&

if (p.GetZielort() == ort && p.GetGewicht() > 10.0)

Beide Bedingungen müssen gleichzeitig erfüllt sein – dafür verwendet man den logischen UND-Operator &&. Ist eine der beiden Bedingungen falsch, ist der gesamte Ausdruck false und das Paket wird übersprungen.

Die Aufgabe gibt beide Kriterien explizit vor:

  • Zielort stimmt überein → p.GetZielort() == ort
  • Gewicht ist größer als 10.0 → p.GetGewicht() > 10.0 (nicht >=, da „schwerer als" gefragt ist)

Strings vergleichen

In C# vergleicht man Strings nicht mit != oder == auf Inhalt... doch, tatsächlich funktioniert == bei Strings in C# korrekt und vergleicht den Inhalt (anders als in Java, wo man equals() verwenden muss). Alternativ ist p.GetZielort().Equals(ort) gleichwertig. Beide Varianten sind im Abitur akzeptiert.

Passende Pakete hinzufügen

gefiltert.Add(p);

Nur wenn die Bedingung erfüllt ist, landet das Paket in der neuen Liste. Am Ende hat gefiltert genau die Pakete, die beide Kriterien erfüllen – diese wird zurückgegeben.

⚠️ **GitHub.com Fallback** ⚠️