jario_
Wróć do przeglądu

Rozdział 4

Arrays

Mit einer Variablen speicherst du einen Wert. Für zehn Messwerte oder die sieben Wochentage bräuchtest du zehn oder sieben Variablen. Ein Array fasst viele Werte desselben Typs unter einem Namen zusammen, und mit einer Schleife gehst du sie alle durch.

Anlegen, lesen, ändern

Die eckigen Klammern hinter dem Typ machen daraus ein Array: int[], String[], double[]. Es gibt zwei Wege, eins anzulegen:

  • mit festen Werten: String[] fruits = {"Apple", "Banana", "Cherry"};
  • mit einer Größe: int[] zeros = new int[4]; (alle Plätze sind dann 0, bei String null)

Jeder Platz hat eine Nummer, den Index. Gezählt wird ab 0: fruits[0] ist das erste Element, fruits[fruits.length - 1] das letzte. length ist die Anzahl der Plätze. Sie steht beim Anlegen fest und ändert sich nicht mehr.

Arrays.toString(...) (mit import java.util.Arrays;) macht aus einem Array einen lesbaren Text.

Możesz zmienić kod i uruchomić go ponownie.

Arrays mit Schleifen

Die klassische Form läuft mit einem Index von 0 bis length - 1. Damit kannst du lesen, schreiben und auch rückwärts laufen.

Brauchst du den Index nicht, ist die for-each-Schleife kürzer: for (int number : numbers) heißt „für jede Zahl in numbers“. Sie liest nur. Werte im Array ändern geht damit nicht.

Możesz zmienić kod i uruchomić go ponownie.

Die erste Zahl der Eingabe sagt, wie viele Zahlen folgen. Probier eine andere Anzahl aus.

Zweidimensionale Arrays

Ein Array kann selbst Arrays enthalten, zum Beispiel für eine Tabelle, ein Spielfeld oder einen Kinosaal. int[][] points ist ein Array von Zeilen, jede Zeile ein int[]. points[1][2] ist Zeile 1, Spalte 2 (beides ab 0 gezählt). points.length ist die Zahl der Zeilen, points[row].length die Länge einer Zeile.

Możesz zmienić kod i uruchomić go ponownie.

Typowe błędy

  • Index außerhalb des Arrays

    Das letzte Element hat den Index length - 1. Mit i <= numbers.length greift die Schleife einmal zu weit, und das Programm bricht ab:

    ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

    In der Bedingung gehört <, nicht <=.

  • Array direkt ausgeben

    System.out.println(numbers) gibt nicht den Inhalt aus, sondern etwas wie [I@1b6d3586. Für den Inhalt Arrays.toString(numbers) benutzen.

  • Zuweisen ist kein Kopieren

    Eine Array-Variable zeigt auf das Array, sie enthält es nicht. Nach int[] b = a; zeigen beide auf dasselbe Array:

    int[] a = {1, 2, 3};
    int[] b = a;
    b[0] = 99;
    System.out.println(a[0]); // 99
  • Array zu klein angelegt

    Die Größe eines Arrays lässt sich nicht nachträglich ändern. Weißt du die Anzahl erst aus der Eingabe, lies sie zuerst ein und lege das Array danach an: int[] numbers = new int[n];.