Aufgabe Vorschlag C - 1 · Abitur Hessen Praktische Informatik LK 2022
Thema: Dynamische Datenstrukturen · Aus der Prüfung LK (2022)
Aufgabenstellung
Material 2
UML-Klassendiagramm
Hinweise: Die Methode toString() der Klasse Einzelteil ergibt eine Zeichenkette der Form:
ID=e19, Lenker wiegt 234 g, kostet 45.00 EUR, Hersteller: TeamPro, Name: Evaluation, 42 cm
Die private Methode leseDatenAusDatei() initialisiert das Attribut String[] konfigzeilen der Klasse Bike mittels der Konfigurationsdatei (Material 1).
Auf alle Attribute kann mittels get-Methoden zugegriffen werden.
1.4
Beim Herstellen eines Bikes ist der Rahmen immer das erste Bauteil. Die Methode hinzufuegenKomp() soll eine automatisierte Montage eines Fahrrads in gegebener Einbaureihenfolge nachbilden. Die Demontage eines Bikes ist genau in der umgekehrten Reihenfolge durchzuführen, weshalb die Komponenten doppelt verkettet werden.
Implementieren Sie die Klasse Bike mit ihrem Konstruktor sowie der Methode hinzufuegenKomp().
Hinweise: Die Methode hinzufuegenKomp() fügt ab der zweiten Komponente eine neue Komponente hinzu. Wenn bereits alle Teile des Bikes montiert sind, gibt sie false zurück. Alle Komponenten des Bikes werden bei der Objekterzeugung automatisch hinzugefügt. [12 BE]
1.5
Es kann erforderlich sein, dass eine in ein Bike eingebaute Komponente ersetzt werden muss. Für den Fall, dass man dafür Komponenten demontieren muss, ist die Kenntnis der Reihenfolge der Demontage vom letzten bis einschließlich zum zu ersetzenden Bauteil erforderlich. Die Methode ersetzeKomp() ersetzt die Komponente mit der gleichen ID und gibt einen String mit den Angaben der auszubauenden Komponenten in der richtigen Reihenfolge zurück. Falls keine Komponente ersetzt wird, soll der zurückgegebene String diese Information enthalten.
Implementieren Sie die Methode ersetzeKomp().
Hinweise: Die zu ersetzende Komponente wird anhand der mitgelieferten ID identifiziert. Da man die erste Komponente, den speziellen Rahmen, nicht ersetzen muss, ist davon auszugehen, dass das Bike mindestens aus zwei montierten Teilen besteht, wenn die Methode ersetzeKomp() ausgeführt wird. [7 BE]

Lösung
Nach den offiziellen Korrekturhinweisen
1.4 Implementieren Sie die Klasse Bike mit ihrem Konstruktor sowie der Methode hinzufuegenKomp().
Lösung: ```java public class Bike { public static int autowert = 0; private int bikeID; private int anzahlKomp; private String modell; private String[] konfigzeilen; private Komponente ersteKomp; private Komponente letzteKomp; private Kategorie kat; public Bike(String dateiname) { this.leseDatenAusDatei(dateiname); String[] teile = this.konfigzeilen[0].split(";"); this.ersteKomp = new RahmenTeil(teile[0], teile[1]); this.letzteKomp = this.ersteKomp; String[] rest = this.konfigzeilen[konfigzeilen.length - 1].split(";"); this.modell = rest[0]; kat = new Kategorie(rest[1]); this.anzahlKomp = 1; autowert++; this.bikeID = autowert; while (this.hinzufuegenKomp()) { } } private void leseDatenAusDatei(String dateiname) { // nicht zu bearbeiten } public boolean hinzufuegenKomp() { Komponente komp = null; if (this.anzahlKomp >= this.konfigzeilen.length - 1) return false; String[] teile = this.konfigzeilen[this.anzahlKomp].split(";"); if (teile[0].startsWith("r")) komp = new RahmenTeil(teile[0], teile[1]); else if (teile[0].startsWith("s")) komp = new SchaltElement(teile[0], teile[1]); else if (teile[0].startsWith("e")) komp = new EinzelTeil(teile[0], teile[1]); this.letzteKomp.setNaechste(komp); komp.setVorherige(this.letzteKomp); this.letzteKomp = komp; this.anzahlKomp++; return true; } } ```
1.5 Implementieren Sie die Methode ersetzeKomp().
Lösung: ```java public String ersetzeKomp(Komponente neu) { String ausbau = "Auszubauen sind:\n"; if (letzteKomp.getID().equals(neu.getID())) { ausbau += letzteKomp.toString(); neu.setVorherige(letzteKomp.getVorherige()); letzteKomp.getVorherige().setNaechste(neu); letzteKomp.setVorherige(null); this.letzteKomp = neu; } else { Komponente aktuelle = letzteKomp; while (aktuelle != ersteKomp && !aktuelle.getID().equals(neu.getID())) { ausbau += aktuelle.toString(); aktuelle = aktuelle.getVorherige(); } if (aktuelle != ersteKomp) { ausbau += aktuelle.toString(); neu.setVorherige(aktuelle.getVorherige()); neu.setNaechste(aktuelle.getNaechste()); aktuelle.getVorherige().setNaechste(neu); aktuelle.getNaechste().setVorherige(neu); aktuelle.setVorherige(null); aktuelle.setNaechste(null); } else { ausbau = "Komponente nicht ausgebaut"; } } return ausbau; } ```
Die ausführliche Erklärung Schritt für Schritt (mit KI) gibt es mit Premium. Premium
Löse sie direkt hier: automatische Korrektur, Hinweise und Lösung Schritt für Schritt.
‹ Aufgabe Vorschlag B - 1.4 · LK 2022 · Aufgabe Vorschlag C - 1 - Dynamische Datenstrukturen · LK 2021 ›