Kapitel 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 dann0, beiStringnull)
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.
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.
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.
Typische Fehler
Index außerhalb des Arrays
Das letzte Element hat den Index
length - 1. Miti <= numbers.lengthgreift 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 InhaltArrays.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]); // 99Array 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];.