====== Abitur 2012/I - Lösung ====== ===== Aufgabe 1 ===== **a)** {{:listen:kompositum:aufgaben:2012:pasted:20241007-201939.png}} **b)** public class SORTIERTELISTE { private LISTENELEMENT erster; public int anzahlAllerAthleten() { return erster.anzahl(); } public void einfuegen(NATION nationNeu) { erster = erster.einfuegen(nationNeu); } } public abstract class LISTENELEMENT { public abstract int anzahl(); public abstract LISTENELEMENT einfuegen(NATION nationNeu); } public class KNOTEN extends LISTENELEMENT { private NATION inhalt; private LISTENELEMENT nachfolger; public KNOTEN(NATION nation, LISTENELEMENT nachfolger) { inhalt = nation; this.nachfolger = nachfolger; } public int anzahl() { return nachfolger.anzahl() + inhalt.gibAnzahlAthleten(); } public LISTENELEMENT einfuegen(NATION nationNeu) { if(inhalt.istKleiner(nationNeu)) { nachfolger = nachfolger.einfuegen(nationNeu); return this; } else { return new KNOTEN(nationNeu, this); } } } public class ABSCHLUSS extends LISTENELEMENT { public int anzahl() { return 0; } LISTENELEMENT einfügen(NATION nationNeu) { return new KNOTEN(nationNeu, this); } } public class NATION { private String land; private int anzahlAthleten; public int gibAnzahlAthleten() { return anzahlAthleten; } } **Anmerkung:** Der Rückgabedatentyp der Methode ''einfügen'' könnte auch auf ''KNOTEN'' beschränkt werden. \\ \\ **c)** Eine mögliche Lösung wäre die Anpassung der Methode ''istKleiner'': Für den Fall, dass es sich beim aktuellen Objekt um Griechenland handelt wird immer ''true'' zurückgegeben, für den Fall, dass es sich beim aktuellen Objekt um das Gastgeberland handelt, wird immer false zurückgegeben. Eine Anpassung der ''anzahlAthleten''-Methode ist dann nicht notwendig. ===== Aufgabe 2 ===== public boolean istBesser(NATION nation) { return ((medaillen[0] > nation.medaillen[0]) || (medaillen[0] == nation.medaillen[0] && medaillen[1] > nation.medaillen[1]) || (medaillen[0] == nation.medaillen[0] && medaillen[1] == nation.medaillen[1] && medaillen[2] > nation.medaillen[2])); }