Informatik

Arrays verstehen: Index, Länge und Zugriff

Arrays verstehen: Index, Länge und Zugriff
Arrays verstehen: Index, Länge und Zugriff
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

Ein Array fasst mehrere Werte desselben Typs unter einem Namen zusammen. Du greifst mit einem Index auf ein bestimmtes Element zu. In Java hat ein Array eine feste Länge; bei einem Array der Länge n sind nur die Indizes von 0 bis n - 1 gültig.

Deine Lernziele

Hake ab, was du schon kannst — und komm am Ende hierher zurück!

Warum ein Array statt vieler Variablen?

Stell dir ein Spiel mit hundert möglichen Inventarplätzen vor. Hundert Variablen wie gegenstand1, gegenstand2 und so weiter wären schwer zu verwalten. Ein Array bündelt die Werte. Eine Schleife kann dann nacheinander auf alle Plätze zugreifen.

Definition

Array

Ein Array ist eine Datenstruktur mit nummerierten Elementen eines gemeinsamen Elementtyps. In Java wird seine Länge beim Erzeugen festgelegt und bleibt für dieses Arrayobjekt unverändert.

Das Bild einer Schubladenreihe hilft: Der Arrayname bezeichnet die ganze Reihe, der Index eine bestimmte Schublade und der gespeicherte Wert ihren Inhalt. Anders als ein Name wie ersteSchublade kann ein Index auch berechnet werden.

Beispiel

Das Java-Array int[] punkte = {12, 18, 15, 20}; speichert vier Ganzzahlen. punkte[0] liefert 12, punkte[2] liefert 15. Ändert das Programm punkte[2] = 17, bleibt die Länge vier; nur der Wert im dritten Element ändert sich.

Teste dich
Frage 1 von 1LeichtWelchen Vorteil hat ein Array gegenüber hundert passend nummerierten Einzelvariablen?
Lösung: Die Elemente lassen sich über berechnete Indizes und Schleifen verarbeiten. — Der gemeinsame Name und die Indizes ermöglichen es, viele gleichartige Werte systematisch zu verarbeiten.
Welche Indizes sind gültig?

In Java beginnt der Index immer bei 0. Deshalb hat ein Array der Länge vier die gültigen Indizes 0, 1, 2 und 3. Der letzte gültige Index ist also array.length - 1.

Merke

Für einen sicheren Java-Zugriff muss gelten: Der Index i ist mindestens 0 und kleiner als array.length.

Die Länge zählt Elemente, der Index zählt ihre Position ab null. Genau hier entsteht häufig ein Off-by-one-Fehler: Wer array.length als letzten Index benutzt, liegt um eins außerhalb des Arrays.

Beispiel

Für String[] farben = {"Rot", "Grün", "Blau"}; ist farben.length gleich 3.

  • farben[0] ist "Rot".
  • farben[2] ist "Blau".
  • farben[3] ist ungültig, denn erlaubt sind nur 0, 1 und 2.

Java löst beim Zugriff auf farben[3] eine ArrayIndexOutOfBoundsException aus.

Teste dich
Frage 1 von 2MittelEin Java-Array hat die Länge 7. Welcher Zugriff ist sicher?
Lösung: werte[6] — Bei Länge 7 reicht der gültige Indexbereich von 0 bis 6.
Frage 2 von 2SchwerEine Variable i kann auch negative Werte enthalten. Welche Prüfung schützt den Zugriff werte[i] vollständig?
Lösung: Prüfe, ob i mindestens 0 und echt kleiner als werte.length ist. — Beide Grenzen sind nötig: i darf nicht negativ sein und muss echt kleiner als die Arraylänge bleiben.
Wie legst du ein Java-Array an und veränderst es?

Bei int[] zahlen = new int[4]; bezeichnet int den Elementtyp, zahlen die Arrayvariable und 4 die Länge. Java füllt neue int-Elemente zunächst mit 0. Anschließend kannst du einzelne Werte zuweisen.

java int[] zahlen = new int[4]; zahlen[0] = 65; zahlen[1] = 5; zahlen[2] = 78; zahlen[3] = 22;

Wenn die Werte schon feststehen, geht es kürzer: int[] zahlen = {65, 5, 78, 22};. Auch danach darfst du etwa mit zahlen[1] = 9 ein Element ändern. Fest ist die Länge, nicht der Inhalt.

Gut zu wissen

Eine Arrayvariable ist in Java eine Referenz auf ein Arrayobjekt. Soll eine andere Länge verwendet werden, muss ein neues Array erzeugt werden. Die Variable kann anschließend auf dieses neue Array zeigen; das ursprüngliche Array selbst wurde dadurch nicht vergrößert.

Lückentext

Wähle in jeder Lücke die passende Form und prüfe anschließend deine Antworten.

Ein Java-Array speichert Elemente eines Typs. Bei Länge 5 lautet der letzte gültige Index ``. Eine Zuweisung an ein gültiges Element verändert den , aber nicht die Länge.

Lösungen: Lücke 1: gemeinsamen; Lücke 2: 4; Lücke 3: Inhalt. Der Elementtyp und die Länge gehören zum erzeugten Array. Weil die Zählung bei null beginnt, ist der letzte Index stets um eins kleiner als die Länge.
Wie durchläufst und durchsuchst du ein Array?

Eine Indexschleife ist sicher, wenn ihre Laufbedingung genau die Arraygrenze beachtet. Das typische Muster lautet:

java for (int i = 0; i != zahlen.length; i++) { System.out.println(zahlen[i]); }

Die Schleife startet mit dem ersten gültigen Index 0. Weil i in jedem Schritt genau um eins steigt, läuft sie nur, solange i noch nicht zahlen.length erreicht hat. Dann endet sie vor dem ungültigen Zugriff.

Beispiel

Gesucht wird der Wert 78 im Array {65, 5, 78, 22}.

  1. Bei Index 0 steht 65: noch kein Treffer.
  2. Bei Index 1 steht 5: noch kein Treffer.
  3. Bei Index 2 steht 78: gefunden.

Eine Suche kann an dieser Stelle abbrechen oder Index 2 als Fundposition zurückgeben. Wenn kein Element passt, endet die Schleife nach dem letzten gültigen Index.

Teste dich
Frage 1 von 2MittelWarum muss eine sichere Schleife enden, bevor i gleich zahlen.length als Index verwendet wird?
Lösung: Weil zahlen.length selbst bereits außerhalb des gültigen Indexbereichs liegt. — Die richtige Grenze schließt genau den ersten ungültigen Index aus und den letzten gültigen Index ein.
Frage 2 von 2SchwerEine Suche soll nur die ersten drei belegten Plätze eines Arrays der Länge zehn prüfen. Welche Schleifengrenze passt?
Lösung: Beende die Suche, sobald i den Wert 3 erreicht. — Bei einem teilweise gefüllten Array kann der belegte Bereich kleiner als die Kapazität sein. Dann muss die Suche den Füllstand statt der gesamten Länge verwenden.
Was bedeutet ein Array von Arrays?

Ein Java-Array kann als Elemente wiederum Arrays enthalten. So entsteht zum Beispiel ein zweidimensionales Array. Der erste Index wählt ein inneres Array, der zweite ein Element darin.

java int[][] raster = { {3, 4, 5}, {8, 9} };

Hier liefert raster[0][1] den Wert 4: raster[0] wählt das erste innere Array, [1] darin das zweite Element. raster[1][1] liefert 9.

Merke

Prüfe bei geschachtelten Java-Arrays jede Ebene getrennt: zuerst raster.length, danach raster[i].length. Innere Arrays dürfen unterschiedlich lang sein.

Deshalb ist ein zweidimensionales Java-Array nicht automatisch eine rechteckige Matrix. Erst wenn alle inneren Arrays gleich lang sind, ergibt sich eine rechteckige Anordnung.

Teste dich
Frage 1 von 2MittelWelchen Wert liefert raster[1][0] im gezeigten Beispiel?
Lösung: 8 — Lies die Indizes schrittweise: erst inneres Array 1, dann Element 0.
Frage 2 von 2SchwerWarum kann eine Schleife über alle Zeilen nicht immer raster[0].length als innere Grenze verwenden?
Lösung: Weil andere innere Arrays eine andere Länge haben können. — Für Zeile i ist raster[i].length die passende Grenze. So richtet sich die Schleife nach der tatsächlich gewählten Zeile.
Wo gelten andere Regeln?

Die genaue Schreibweise und manche Eigenschaften hängen von der Programmiersprache und der verwendeten Datenstruktur ab.

  • Java-Arrays beginnen bei Index 0 und haben nach der Erzeugung eine feste Länge.
  • Manche Sprachen erlauben andere Indexgrenzen. In Pascal kann ein Array beispielsweise mit einer ausdrücklich gewählten Unter- und Obergrenze deklariert werden.
  • Scratch-Listen zählen in der beschriebenen Umgebung ab 1 und können durch Anhängen wachsen. Eine solche Liste darf deshalb nicht ungeprüft wie ein Java-Array behandelt werden.
Definition

Array und Liste

Ein Array hat in Java eine feste Länge und indexierte Elemente eines festgelegten Typs. Eine Liste ist eine andere Datenstruktur, die je nach Sprache oder Bibliothek wachsen und schrumpfen kann. Ähnliche Darstellung bedeutet nicht identisches Verhalten.

Teste dich
Frage 1 von 1SchwerDu überträgst einen Algorithmus von einer Scratch-Liste auf ein Java-Array. Was musst du zuerst prüfen?
Lösung: Indexbeginn, Größenverhalten und verfügbare Operationen — Ein Algorithmus muss zu den Regeln der konkreten Sprache und Datenstruktur passen.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • Array
    • Aufbau: gemeinsamer Elementtyp und feste Länge in Java
    • Zugriff: Index beginnt in Java bei 0
    • Grenze: letzter Index ist length - 1
    • Verarbeitung: Schleife und Suche
    • Verschachtelung: Array von Arrays
    • Abgrenzung: dynamische Liste kann andere Regeln haben
Abschluss-Check
Teste dich
Frage 1 von 4LeichtWelche Aussage beschreibt ein Java-Array korrekt?
Lösung: Es bündelt Elemente eines festgelegten Typs und besitzt eine feste Länge. — Ein Java-Array verbindet einen festen Elementtyp mit einer bei der Erzeugung festgelegten Länge.
Frage 2 von 4MittelDas Array char[] code = {'A', 'B', 'C', 'D'}; hat welche letzte gültige Position?
Lösung: Index 3 mit dem Wert 'D' — Die Länge ist vier. Der letzte Index ist daher 4 - 1, also 3.
Frage 3 von 4SchwerEine Schleife verarbeitet auch noch den Index daten.length. Welche kleinste Korrektur verhindert den Grenzfehler?
Lösung: Beende die Schleife, sobald i den Wert daten.length erreicht. — Die Schleife darf von Index 0 bis daten.length - 1 laufen und muss dann vor dem nächsten Zugriff stoppen.
Frage 4 von 4SchwerEin Java-Array der Länge zwölf enthält nur fünf Nutzwerte. Welche zwei Grenzen musst du bei einer Suche beachten?
Lösung: Der Index muss innerhalb des Arrays und kleiner als der Füllstand fünf bleiben. — Die Kapazität schützt den Speicherzugriff; der Füllstand bestimmt hier den fachlich sinnvollen Suchbereich.

Passend dazu