CS_LEVEL_7_SOLUTION - OnlyCook/abitur-elite-code GitHub Wiki
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;
}
}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.
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)
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.
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.