CS_LEVEL_6_SOLUTION - OnlyCook/abitur-elite-code GitHub Wiki
public class Paket
{
private double gewicht;
private string zielort;
public Paket(string ziel, double gew)
{
this.gewicht = gew;
this.zielort = ziel;
}
public double GetGewicht()
{
return gewicht;
}
public string GetZielort()
{
return zielort;
}
}
public class Lager
{
private List<Paket> pakete;
public Lager()
{
pakete = new List<Paket>();
}
public void Hinzufuegen(Paket p)
{
pakete.Add(p);
}
public Paket ErmittleLeichtestes()
{
if (pakete.Count == 0) return null;
Paket leichtestesPaket = pakete[0];
foreach (Paket p in pakete)
{
if (p.GetGewicht() < leichtestesPaket.GetGewicht())
{
leichtestesPaket = p;
}
}
return leichtestesPaket;
}
}Das Klassendiagramm gibt vor, welche Klassen, Attribute und Methoden implementiert werden müssen – und zwar exakt so wie angegeben. Das gilt für Namen, Typen und Parameter.
Die Klasse Paket hat zwei private Attribute (gewicht und zielort) sowie einen Konstruktor mit den Parametern ziel und gew. Die Reihenfolge der Parameter im Konstruktor entspricht der Angabe im Diagramm – das sollte immer eingehalten werden.
Lager verwaltet intern eine Liste von Paket-Objekten. Diese Liste wird im Konstruktor initialisiert:
pakete = new List<Paket>();public void Hinzufuegen(Paket p)
{
pakete.Add(p);
}Diese Methode nimmt ein Paket-Objekt entgegen und fügt es der internen Liste hinzu. Sie ist der einzige Weg, wie Pakete ins Lager gelangen – das Lager kontrolliert also selbst seinen Inhalt.
Dieser Algorithmus funktioniert nach demselben Prinzip wie ErmittleAeltestes() aus Level 5 – nur suchen wir diesmal das Minimum statt das Maximum. Der einzige Unterschied liegt im Vergleichsoperator: statt > wird < verwendet.
if (p.GetGewicht() < leichtestesPaket.GetGewicht())
{
leichtestesPaket = p;
}Ist das aktuelle Paket leichter als der bisherige Kandidat, wird der Kandidat ersetzt.
if (pakete.Count == 0) return null;Ohne diese Prüfung würde pakete[0] bei einer leeren Liste einen Laufzeitfehler auslösen. Diese Zeile sollte immer ganz am Anfang stehen, bevor auf ein Listenelement zugegriffen wird – im Abitur kostet das Fehlen dieser Prüfung regelmäßig Punkte.
Angenommen, die Liste enthält drei Pakete mit den Gewichten [8.0, 3.5, 6.0]:
| Schritt | p.GetGewicht() |
leichtestesPaket.GetGewicht() |
Bedingung p < leichtestes
|
leichtestesPaket wird |
|---|---|---|---|---|
| Start | – | 8.0 (pakete[0]) | – | Paket mit 8.0 kg |
| 1 | 8.0 | 8.0 | ❌ | Paket mit 8.0 kg |
| 2 | 3.5 | 8.0 | ✅ | Paket mit 3.5 kg |
| 3 | 6.0 | 3.5 | ❌ | Paket mit 3.5 kg |
Rückgabe: das Paket mit Gewicht 3.5.