Arrays und Datenstrukturen

Arrays and Data Structures

Informatik Klasse 10 16 Aufgaben
ArraysDatenstrukturenProgrammierungReferenzenKerncurriculum

Ein Array (eindimensionales Feld) verwaltet viele gleichartige Werte unter einem Namen, einzeln erreichbar über einen Index; durchlaufen wird es mit einer Zählschleife, dazu Einfügen, Entfernen und Suchen. Zwei dokumentierte Hürden stehen im Zentrum (Qian & Lehman 2017): die Null-Indizierung — das erste Element hat Index 0, ein Feld der Länge n endet bei n−1 (die klassische Um-eins-daneben-Falle) — und Referenzen: Eine Array-Variable hält einen Verweis, und eine Zuweisung kopiert diesen Verweis, nicht die Elemente.

Leicht
Multiple Choice #1 15s ▶ Testen

Ein Programm soll die 25 Testergebnisse einer Klasse unter einem Namen speichern. Welche Deklaration nutzt dafür ein Array (Feld)?

  • ● int[] punkte = new int[25];
  • ○ int punkte1; int punkte2; int punkte3; ...
  • ○ String punkte = "25 Ergebnisse";
Ein Array speichert eine feste Anzahl gleichartiger Elemente unter einem Namen, erreichbar über den Index: punkte[0] bis punkte[24]. 25 einzelne Variablen sind unhandlich, und ein Text speichert keine einzeln zugreifbaren Zahlen.
Lückentext #2 15s ▶ Testen

Der ___ eines Array-Elements gibt seine Position im Array an. In den meisten Programmiersprachen beginnt er bei 0.

✓ Antwort: Index
Index: arr[0] ist das erste Element, arr[1] das zweite usw. Ein Array der Länge n hat Indizes 0 bis n-1. Zugriff auf arr[n] würde einen IndexOutOfBoundsError verursachen.
Wahr / Falsch #3 15s ▶ Testen

Ein Array kann Elemente unterschiedlicher Datentypen speichern (z. B. gleichzeitig Zahlen und Texte).

✓ Falsch
Falsch (in typisierten Sprachen wie Java). Ein Array speichert Elemente desselben Datentyps: int[], String[], double[]. Für verschiedene Typen benötigt man andere Datenstrukturen oder generische Klassen.
Multiple Choice #4 20s ▶ Testen

Was gibt die Eigenschaft 'Länge' eines Arrays an?

  • ○ Die Größe eines Elements in Bytes
  • ● Die Anzahl der im Array gespeicherten Elemente
  • ○ Den maximalen Index
  • ○ Den Datentyp der Elemente
Die Länge (length) gibt an, wie viele Elemente das Array enthält. Ein Array der Länge 5 hat die Indizes 0, 1, 2, 3, 4. Die Länge ist bei der Erstellung festgelegt.
Wahr / Falsch #5 15s ▶ Testen

Objekte können in Arrays gespeichert werden (z. B. ein Array von Schueler-Objekten).

✓ Wahr
Richtig. Schueler[] klasse = new Schueler[30] erstellt ein Array für 30 Schueler-Objekte. Jedes Element ist eine Referenz auf ein Schueler-Objekt (initial null, bis zugewiesen).
Multiple Choice #6 15s ▶ Testen

Im UML-Klassendiagramm wird die Klasse Schueler als Rechteck mit drei Bereichen gezeichnet. Was steht im mittleren Bereich?

  • ● die Attribute, z. B. name und klasse
  • ○ die Methoden, z. B. getName()
  • ○ die Objekte, z. B. schueler1
Das Klassen-Rechteck hat drei Bereiche: oben der Klassenname, in der Mitte die Attribute, unten die Methoden. Objekte tauchen im Klassendiagramm gar nicht auf — es zeigt den Bauplan, nicht die Exemplare.
Mittel
Multiple Choice #1 20s ▶ Testen

Gegeben: Konto a = new Konto(); Konto b = a; b.einzahlen(50);. Welchen Kontostand liefert a.getStand() danach?

  • ● 50
  • ○ 0
  • ○ 100
b = a kopiert nicht das Objekt, sondern nur die Referenz — beide Variablen verweisen auf dasselbe Konto im Speicher. Die Einzahlung über b sieht man also auch über a. „0" wäre richtig, wenn b eine Kopie wäre; „100" zählt die Einzahlung doppelt.
Lückentext #2 20s ▶ Testen

Wenn man in einem Programm ein Objekt über eine ___ anspricht, arbeitet man nicht mit einer Kopie, sondern mit dem Original.

✓ Antwort: Referenz
Referenzsemantik: Die Variable enthält nur einen Zeiger auf das Objekt. Änderungen über verschiedene Referenzen auf dasselbe Objekt wirken sich auf das gleiche Objekt aus — anders als bei primitiven Datentypen (Wertsemantik).
Wahr / Falsch #3 20s ▶ Testen

Um ein Element in der Mitte eines Arrays einzufügen, müssen alle nachfolgenden Elemente verschoben werden.

✓ Wahr
Richtig. Arrays haben eine feste Struktur: Um an Position i einzufügen, müssen alle Elemente ab Position i um eins nach rechts verschoben werden. Einfügen am Ende ist effizient, in der Mitte aufwendig.
Multiple Choice #4 20s ▶ Testen

In der Klasse Konto ist das Attribut kontostand private, die Methode einzahlen(int betrag) ist public. Welcher Zugriff von außen funktioniert?

  • ● konto.einzahlen(50);
  • ○ konto.kontostand = 50;
  • ○ konto.getKontostand() = 50;
Das ist Datenkapselung: private Attribute sind von außen nicht direkt erreichbar, der Zugriff läuft kontrolliert über öffentliche Methoden. konto.kontostand = 50 scheitert am private, und einem Getter-Aufruf kann man nichts zuweisen.
Multiple Choice #5 20s ▶ Testen

Das Array noten hat die Länge 8. Welche for-Schleife besucht jedes Element genau einmal und stürzt nicht ab?

  • ● for (int i = 0; i < noten.length; i++)
  • ○ for (int i = 0; i <= noten.length; i++)
  • ○ for (int i = 1; i < noten.length; i++)
Die gültigen Indizes laufen von 0 bis Länge−1, hier 0 bis 7. Mit <= greift die Schleife am Ende auf noten[8] zu — Laufzeitfehler. Mit Start bei 1 wird noten[0] übersprungen.
Lückentext #6 20s ▶ Testen

Eine Klasse kann als ___ für ein Objekt verwendet werden — z. B. kann eine Variable des Typs 'Schueler' ein Schueler-Objekt referenzieren.

✓ Antwort: Datentyp
In der OOP sind Klassen Datentypen: 'Schueler s = new Schueler()'. Die Variable s hat den Typ Schueler und referenziert ein Schueler-Objekt. So können Klassen als Attributtypen anderer Klassen dienen.
Multiple Choice #7 20s ▶ Testen

Was passiert bei einem Zugriff auf arr[5] in einem Array der Länge 5?

  • ○ Das letzte Element wird zurückgegeben
  • ● Es wird ein Fehler (IndexOutOfBoundsException) ausgelöst, da der gültige Index von 0 bis 4 reicht
  • ○ Das Array wird automatisch vergrößert
Ein Array der Länge 5 hat die Indizes 0, 1, 2, 3, 4. Index 5 liegt außerhalb und verursacht einen Laufzeitfehler. Solche Fehler müssen durch sorgfältige Programmierung vermieden werden.
Lückentext #8 20s ▶ Testen

Beim ___ von Elementen aus einem Array müssen ggf. nachfolgende Elemente nach vorne verschoben werden, um Lücken zu füllen.

✓ Antwort: Entfernen
Entfernen aus der Mitte: Element löschen, alle Elemente dahinter um eine Position nach links schieben, Länge (logisch) um 1 verringern. Am Ende entfernen ist einfacher.
Multiple Choice #9 20s ▶ Testen

Eine Schule hat viele Lehrer (1:n). Welches Attribut passt dafür in die Klasse Schule?

  • ● Lehrer[] lehrer
  • ○ Lehrer lehrer
  • ○ String lehrer
Eine 1:n-Beziehung braucht viele Referenzen: ein Array oder eine Liste von Lehrer-Objekten. Eine einzelne Referenz (Lehrer lehrer) trägt nur eine 1:1-Beziehung, und ein String speichert höchstens Namen, keine ansprechbaren Objekte.
Multiple Choice #10 20s ▶ Testen

In welcher Codezeile kommuniziert das Objekt verleih mit dem Objekt rad1 (schickt ihm eine Nachricht)?

  • ● rad1.verleihen("Mia");
  • ○ rad1 = new Fahrrad();
  • ○ Fahrrad rad1;
Objekte kommunizieren über Methodenaufrufe mit Parametern — rad1.verleihen("Mia") schickt dem Fahrrad-Objekt die Nachricht „verleihe dich an Mia". new Fahrrad() erzeugt nur ein Objekt, und Fahrrad rad1; deklariert nur eine Variable.