Part 3

Arrays

Wir haben uns mit der ArrayList vertraut gemacht, die viele Funktionen bietet, um das Leben von Programmierenden zu erleichtern. Vielleicht ist die wichtigste Funktion das Hinzufügen von Elementen. Aus der Sicht der Programmierenden ist die Größe der ArrayList unbegrenzt. In Wirklichkeit gibt es keine magischen Tricks in der ArrayList - sie wurden wie alle anderen Programme oder Werkzeuge, die die Programmiersprache bietet, programmiert. Wenn Sie eine Liste erstellen, wird ein begrenzter Speicherplatz im Speicher des Computers reserviert. Wenn die ArrayList keinen Platz mehr hat, wird ein größerer Speicherplatz reserviert und die Daten aus dem vorherigen Speicherplatz werden in den neuen kopiert.

Auch wenn die ArrayList einfach zu verwenden ist, benötigen wir manchmal den Vorgänger der ArrayList, das Array.

Ein Array enthält eine begrenzte Anzahl nummerierter Plätze (Indizes) für Werte. Die Länge (oder Größe) eines Arrays ist die Anzahl dieser Plätze, d.h. wie viele Werte Sie im Array platzieren können. Die Werte in einem Array werden Elemente genannt.

Ein Array erstellen

Es gibt zwei Möglichkeiten, ein Array zu erstellen. Bei der ersten müssen Sie die Größe bei der Erstellung explizit festlegen. So erstellen Sie ein Array, das drei ganze Zahlen enthält:

int[] numbers = new int[3];

Ein Array wird deklariert, indem nach dem Typ der enthaltenen Elemente eckige Klammern hinzugefügt werden (elementtyp[]). Ein neues Array wird durch Aufruf von new, gefolgt vom Typ der Elemente, eckigen Klammern und der Anzahl der Elemente in den eckigen Klammern erstellt.

Ein Array, das 5 Strings enthält, kann so erstellt werden:

String[] strings = new String[5];

Zuweisen und Zugreifen auf Elemente

Auf ein Element eines Arrays wird über seinen Index zugegriffen. Im folgenden Beispiel erstellen wir ein Array, das 3 ganze Zahlen enthält, und weisen dann den Indizes 0 und 2 Werte zu. Danach drucken wir die Werte aus.

int[] numbers = new int[3];
numbers[0] = 2;
numbers[2] = 5;

System.out.println(numbers[0]);
System.out.println(numbers[2]);

Das Zuweisen eines Wertes zu einem bestimmten Platz in einem Array funktioniert ähnlich wie das Zuweisen eines Wertes zu einer normalen Variablen, aber im Array müssen Sie den Index angeben, d.h. zu welchem Platz Sie den Wert zuweisen möchten. Der Index wird in eckigen Klammern angegeben. Die get-Methode der ArrayList funktioniert sehr ähnlich wie der Zugriff auf ein Element eines Arrays. Nur die Syntax, d.h. die Art und Weise, wie Dinge geschrieben werden, ist unterschiedlich.

Der Index ist eine ganze Zahl und sein Wert liegt zwischen [0, Länge des Arrays - 1]. Zum Beispiel hat ein Array mit 5 Elementen die Indizes 0, 1, 2, 3 und 4.

Scanner reader = new Scanner(System.in);

int[] numbers = new int[5];
numbers[0] = 42;
numbers[1] = 13;
numbers[2] = 12;
numbers[3] = 7;
numbers[4] = 1;

System.out.println("Welchen Index sollen wir abrufen? ");
int index = Integer.valueOf(reader.nextLine());

System.out.println(numbers[index]);

Der im Array enthaltene Wert kann auch als Wert einer anderen Variablen zugewiesen werden.

Scanner reader = new Scanner(System.in);

int[] numbers = new int[5];
numbers[0] = 42;
numbers[1] = 13;
numbers[2] = 12;
numbers[3] = 7;
numbers[4] = 1;

System.out.println("Welchen Index sollen wir abrufen? ");
int index = Integer.valueOf(reader.nextLine());

int number = numbers[index];
System.out.println(number);
Quiz

Loading...

Loading

Größe eines Arrays und Iteration

Sie können die Größe des Arrays über die zugehörige Variable length ermitteln. Auf diese zugehörige Variable kann zugegriffen werden, indem Sie den Namen des Arrays gefolgt vom Namen der Variable schreiben, d.h. numbers.length. Beachten Sie, dass dies kein Methodenaufruf ist, daher funktioniert numbers.length() nicht.

Sie können über das Array iterieren, d.h. jedes Element des Arrays mit einer while-Schleife durchlaufen.

int[] numbers = new int[4];
numbers[0] = 42;
numbers[1] = 13;
numbers[2] = 12;
numbers[3] = 7;

System.out.println("Das Array hat " + numbers.length + " Elemente.");

int index = 0;
while (index < numbers.length) {
    System.out.println(numbers[index]);
    index = index + 1;
}
Beispielausgabe

Das Array hat 4 Elemente. 42 13 12 7

Im obigen Beispiel werden die Indizes 0, 1, 2 und 3 durchlaufen, und bei jedem Index wird der dort gespeicherte Wert ausgegeben. Zuerst wird numbers[0] ausgegeben, dann numbers[1] usw. Die Iteration stoppt, sobald die Bedingung der Schleife index < numbers.length falsch ist, d.h. sobald die Indexvariable größer oder gleich der Länge des Arrays ist. Hinweis! Die Iteration stoppt nicht in dem Moment, in dem die Indexvariable zu groß wird; die Bedingung wird nur zu Beginn der while-Schleife ausgewertet.

Loading...

Loading

Wenn der Index außerhalb des Arrays liegt, d.h. das Element nicht existiert, erhalten wir eine ArrayIndexOutOfBoundsException. Dieser Fehler zeigt an, dass das Array den angegebenen Index nicht enthält. Sie können nicht außerhalb des Arrays zugreifen, d.h. ein Index, der kleiner als 0 oder größer oder gleich der Größe des Arrays ist.

Das nächste Beispiel ist ein Programm, das zunächst den Benutzer fragt, wie viele Zahlen eingegeben werden sollen, und dann die Zahlen eingibt. Schließlich gibt es die Zahlen in derselben Reihenfolge aus. Die Zahlen werden in einem Array gespeichert.

System.out.print("Wie viele Zahlen? ");
int howMany = Integer.valueOf(reader.nextLine());

int[] numbers = new int[howMany];

System.out.println("Geben Sie die Zahlen ein:");

int index = 0;
while (index < numbers.length) {
    numbers[index] = Integer.valueOf(reader.nextLine());
    index = index + 1;
}

System.out.println("Hier sind die Zahlen nochmal:");

index = 0;
while (index < numbers.length) {
    System.out.println(numbers[index]);
    index = index + 1;
}

Eine Ausführung des Programms könnte so aussehen:

Beispielausgabe

Wie viele Zahlen? 4 Geben Sie die Zahlen ein: 4 8 2 1 Hier sind die Zahlen nochmal: 4 8 2 1

Typ der Elemente

Sie können ein Array erstellen, indem Sie den Typ der Elemente des Arrays

gefolgt von eckigen Klammern angeben (elementtyp[]). Daher können die Elemente des Arrays von jedem Typ sein. Hier sind einige Beispiele:

String[] months = new String[12];
double[] approximations = new double[100];

months[0] = "Januar";
approximations[0] = 3.14;

Array als Parameter einer Methode

Sie können Arrays wie jede andere Variable als Parameter einer Methode verwenden. Da ein Array ein Referenztyp ist, ist der Wert des Arrays ein Verweis auf die im Array enthaltenen Informationen. Wenn Sie ein Array als Parameter einer Methode verwenden, erhält die Methode eine Kopie des Verweises auf das Array.

public static void listElements(int[] integerArray) {
    System.out.println("Die Elemente des Arrays sind: ");
    int index = 0;
    while (index < integerArray.length) {
        int number = integerArray[index];
        System.out.print(number + " ");
        index = index + 1;
    }

    System.out.println("");
}
int[] numbers = new int[3];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;

listElements(numbers);
Beispielausgabe

Die Elemente des Arrays sind: 1 2 3

Wie bereits erwähnt, können Sie den Namen des Parameters innerhalb der Methode frei wählen, der Name muss nicht derselbe sein wie der Name der Variablen, wenn Sie die Methode aufrufen. Im obigen Beispiel nennen wir das Array integerArray, während der Aufrufer der Methode dasselbe Array numbers nennt.

Ein Array ist ein Objekt, sodass sich Änderungen am Array innerhalb der Methode auch nach der Ausführung der Methode bestehen.

Loading
Loading
Loading

Der kürzere Weg, ein Array zu erstellen

Wie bei Strings gibt es auch eine Abkürzung, um ein Array zu erstellen. Hier erstellen wir ein Array, das 3 ganze Zahlen enthält, und initialisieren es mit den Werten 100, 1 und 42:

int[] numbers = {100, 1, 42};

Abgesehen vom Aufruf von new können wir ein Array auch mit einem Block initialisieren, der durch Kommas getrennte Werte enthält, die im Array zugewiesen werden sollen. Dies funktioniert für alle Typen: unten initialisieren wir ein Array von Strings, dann ein Array von Gleitkommazahlen. Schließlich werden die Werte gedruckt.

String[] arrayOfStrings = {"Matti L.", "Matti P.", "Matti V."};
double[] arrayOfFloatingpoints = {1.20, 3.14, 100.0, 0.6666666667};

for (int i = 0; i < arrayOfStrings.length; i++) {
    System.out.println(arrayOfStrings[i] + " " +  arrayOfFloatingpoints[i]);
}
Beispielausgabe

Matti L. 1.20 Matti P. 3.14 Matti V. 100.0

Wenn Sie ein Array mit einem Block initialisieren, ist die Länge des Arrays genau die Anzahl der im Block angegebenen Werte. Die Werte des Blocks werden in der Reihenfolge dem Array zugewiesen, d.h. der erste Wert wird dem Index 0 zugewiesen, der zweite Wert dem Index 1 usw.

// index           0   1    2    3   4   5     6     7
int[] numbers = {100,  1,  42,  23,  1,  1, 3200, 3201};

// druckt die Zahl an Index 0, d.h. die Zahl 100
System.out.println(numbers[0]);
// druckt die Zahl an Index 2, d.h. die Zahl 42
System.out.println(numbers[2]);

Wie in ArrayLists können Sie nicht auf einen Index außerhalb des Arrays zugreifen. Sie können das folgende Beispiel auf Ihrem eigenen Computer ausprobieren, zum Beispiel im Sandbox.

String[] arrayOfStrings = {"Matti L.", "Matti P.", "Matti V."};
double[] arrayOfFloatingpoints = {1.20, 3.14, 100.0, 0.6666666667};

for (int i = 0; i < arrayOfFloatingpoints.length; i++) {
    System.out.println(arrayOfStrings[i] + " " +  arrayOfFloatingpoints[i]);
}


Sie haben das Ende dieses Abschnitts erreicht! Weiter zum nächsten Abschnitt: