Im heutigen Beitrag wirst du in Java Arrays kennenlernen und außerdem erfahren, wofür diese nützlich sind und wie man sie in Verbindung mit einer for Schleife einsetzen kann. Es wird also interessant!
Inhaltsverzeichnis
1. Das wirst du heute lernen
Zunächst werden wir der Frage auf den Grund gehen, was in Java Arrays eigentlich sind. Wir werden uns also in der Theorie einen Überblick darüber verschaffen und nach einer kleinen Einführung wirst du schnell herausgefunden haben, was man unter diesem Begriff versteht.
Im zweiten Teil dieses Beitrags sehen wir uns dann Arrays anhand eines Beispiels an und übertragen das Wissen, das wir in der Theorie gesammelt haben, in die Praxis.
Verlieren wir also keine Zeit und starten direkt mit der Frage:
2. Was ist ein Array?
Ein Array ist eine sogenannte Datenstruktur, die man sich wie eine Datensammlung vorstellen kann. Im Programm zuvor hatten wir bereits einfache Variablen benutzt und darin Werte gespeichert.
Diese gespeicherten Werte waren im Prinzip nichts anderes als Daten.
Arrays sind im Grunde wie Variablen, mit dem Unterschied, dass wir in Arrays mehrere Werte speichern können.
Während wir in einer normalen Variable vom Typ Integer beispielsweise nur die Zahl 10 speichern können, ermöglicht uns ein Integer-Array, beliebig viele Integer-Werte zu speichern. Über die Größe entscheiden wir selbst.
Das wirst du dann aber noch in der Praxis sehen. Da sich alle Werte zusammen in einem Array befinden und jedes Array lediglich einen Namen besitzt, müssen wir irgendeine Möglichkeit finden, um auf die verschiedenen Werte zugreifen zu können.
3. Wie kann man auf die Elemente eines Arrays zugreifen?
Der Zugriff erfolgt über einen sogenannten Index. Über diesen können wir die einzelnen Elemente, womit die Werte eines Arrays gemeint sind, ansprechen.
Weil das alles vermutlich noch etwas verwirrend klingt, sehen wir uns das Thema jetzt mal in der Praxis anhand eines Beispiels an.
4. Java Arrays in der Praxis
Zunächst werden wir eine Variable deklarieren, in der wir einen String speichern. Wir verwenden also den Typ String, nennen die Variable „test“ und speichern beispielhaft den Namen „Hendrik“ darin.
String test = "Hendrik";
Damit haben wir eine ganz normale Variable, stehen jedoch vor dem Problem, dass wir darin nur einen Wert speichern können. Die folgende Zeile Code wäre beispielsweise nicht machbar und würde zu einem Fehler führen:
String test = "Hendrik", "Paul";
Denn wie bereits erwähnt, nimmt eine Variable lediglich einen Wert entgegen. Für dieses Problem gibt es allerdings eine Lösung: Arrays.
Ein Array deklarieren und initialisieren
An dieser Stelle löschen wir den Code wieder und lassen nur das Wort „String“ stehen.
Der Unterschied zur Variablendeklaration besteht darin, dass man bei einem Array nach dem Datentyp zwei eckige Klammern setzt.
Also eine geöffnete und anschließend eine geschlossene eckige Klammer. Danach schreibt man wie gewohnt den Bezeichner und damit den Namen des Arrays.
In diesem String-Array werden wir jetzt mehrere Namen speichern, weshalb wir es „names“ nennen:
String[] names
In der Praxis ist es oft so, dass man bei Arrays die Variable im Plural benennt, damit man direkt sieht, dass es sich um ein Array handelt.
Damit haben wir auch schon die Variable angelegt, in der wir das Array speichern. Der einzige Unterschied zur normalen Variable besteht also darin, dass wir eckige Klammern angeben müssen.
Und zwar immer nach dem Datentyp und vor dem Bezeichner.
Im nächsten Schritt kommt etwas Neues auf uns zu:
String[] names = new String[3];
Was habe ich hier gemacht? Zunächst kommt das Schlüsselwort new, wovon du vermutlich noch nicht viel gehört hast. Dieses Schlüsselwort wird dann wichtig, wenn wir uns mit dem Thema Objektorientierung beschäftigen.
Mit der Zeile „new String“ erstellen wir für das Array ein Objekt vom Typ String Array, wofür wir das Schlüsselwort „new“ benötigen.
Du kannst dir einfach merken:
Beim Erstellen eines Arrays schreibst du nach dem =-Zeichen „new“ und dann den Typ, von dem das Array sein soll. Der Typ muss immer mit dem zu Beginn angegebenen Typen übereinstimmen. Danach folgt ein eckiges Klammerpaar, in welches man eine Integer-Zahl schreibt.
Die Zahl zwischen den eckigen Klammern
Diese Zahl gibt an, wie viele Werte wir letzten Endes im Array speichern möchten.
Da wir in unserem Beispiel die Zahl 3 angegeben haben, bedeutet das, dass wir drei Namen in diesem Array speichern möchten.
Das heißt: Vier Werte könnten wir nicht speichern, da das Array eine feste Länge von 3 besitzt, die wir bei der Initialisierung festgelegt haben.
Das ist auch ein ganz wichtiger Punkt, den ich nochmal unterstreichen möchte:
Die Größe eines Arrays wird immer bei der Initialisierung festgelegt. Wir müssen also bei der Initialisierung direkt angeben, wie lang dieses sein soll.
Damit haben wir also ein Array mit einer Größe von drei Elementen definiert!
Die Array-Deklaration zusammengefasst
Gehen wir das Ganze zur Wiederholung nun noch einmal durch:
Wie gewohnt geben wir den Datentyp und den Namen des Arrays an, mit dem Unterschied zur normalen Variablendeklaration, dass wir das eckige Klammerpaar hinter dem Schlüsselwort String ergänzen. Dadurch erkennt der Computer, dass es sich um ein Array handelt und sich mehrere Werte darin befinden.
Anschließend müssen wir ein Array-Objekt erstellen. Im Fall unseres Beispiels also ein Objekt vom Typ String. Das setzen wir mit dem Schlüsselwort new um und geben anschließend noch ein weiteres Mal den Typ des Arrays an, also String.
Danach folgen noch einmal die eckigen Klammern, allerdings schreiben wir diesmal einen Zahlenwert dazwischen, der die Größe des Arrays festlegt.
Das ist auch schon alles, was du dir merken solltest. Sobald wir zum Thema Objektorientierung kommen, wirst du im Detail verstehen, was wir hier eigentlich gemacht haben.
Dem Array Werte hinzufügen
Wir haben damit also ein Array deklariert, allerdings gibt es darin noch keine Werte. Wie bereits vorhin erwähnt, enthält ein Array einzelne Elemente. Bei den Elementen handelt es sich um dessen Werte. Über einen sogenannten Index kann man auf diese Elemente zugreifen. Das funktioniert folgendermaßen, wenn wir beispielsweise auf den ersten Wert unseres Arrays zugreifen möchten:
String[] names = new String[3];
names[0] = "Hendrik";
Mit dieser Zeile sagen wir dem Programm, dass an der ersten Stelle von drei möglichen Stellen des Arrays der String "Hendrik" gespeichert werden soll.
Vielleicht wunderst du dich, weshalb ich anstatt der 1 eine 0 angegeben habe, da wir schließlich auf die erste Stelle des Arrays zugreifen möchten.
Das liegt ganz einfach daran, dass in Java Arrays bei 0 starten. In der Programmierung fängt man nämlich nicht bei 1 an zu zählen, sondern bei 0. Das ist historisch bedingt. Du solltest dir das also am besten einfach merken.
Die anderen beiden Werte können wir jetzt auch noch belegen:
names[0] = "Hendrik";
names[1] = "Paul";
Diesmal möchten wir auf die zweite Stelle und damit auf das zweite Element des Arrays zugreifen. Deshalb schreiben wir die Zahl 1 zwischen die eckigen Klammern. Abschließend greifen wir noch auf das dritte Element zu:
names[0] = "Hendrik";
names[1] = "Paul";
names[2] = "Fabienne";
Damit haben wir insgesamt drei Namen gespeichert und das Array hat eine Größe von drei. Wir haben also alles richtig gemacht!
Es wäre auch möglich, weniger Namen darin zu speichern, mehr könnten es allerdings nicht sein. Das liegt daran, dass wir eine maximale Länge in den Klammern festgelegt haben, die verbindlich ist.
Ein Element des Arrays auf der Konsole ausgeben lassen
Mit einer println-Methode können wir überprüfen, ob das Ganze funktioniert hat, indem wir uns beispielsweise den zweiten Wert (Paul) ausgeben lassen:
System.out.println(names[1]);
Hier greifen wir wieder mit dem „index-Operator“ sozusagen in den eckigen Klammern auf den jeweiligen Index zu. In diesem Fall Index 1, weil 1 schließlich auf die zweite Stelle im Array referenziert. Dann speichern wir das Ganze, führen es aus und sehen, dass das Programm "Paul" in der Konsole ausgibt:
Wie du siehst, sind in Java Arrays eigentlich ganz einfach zu verstehen.
Auf diese Art und Weise können wir das mit allen möglichen Typen und später auch mit Klassentypen umsetzen. Wir haben für unser Beispiel den Typ String gewählt, könnten aber auch beispielsweise mit Integern und Doubles Arrays erstellen.
Abschließend möchte ich dir noch zeigen, wie du dein neu erlerntes Wissen in Verbindung mit einer for Schleife einsetzen kannst.
5. Java Arrays mit einer for Schleife durchlaufen
Den bisherigen Code kommentieren wir jetzt einfach mal aus, damit wir diesen später als Vergleich haben.
Wie wir gerade gesehen haben, können wir uns über die println-Methode und den Index immer den jeweiligen Wert ausgeben lassen. Da wir hier mit einem Index, also einer Zahl arbeiten, könnte man jetzt natürlich auf die Idee kommen, das Ganze in einer for Schleife durchlaufen zu lassen. Und das ist tatsächlich möglich.
Wir schreiben dazu zunächst die folgende Zeile Code:
for(int i = 0; i < names.length; i++) {
}
Wir starten bei 0, schreiben anschließend „i <“ und den Namen des Arrays gefolgt von einer weiteren Besonderheit: .length. Dann ergänzen wir am Ende noch i++.
In den Codeblock schreiben wir eine println-Methode:
for(int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
Anstatt eine feste Zahl, also einen Index zwischen die eckigen Klammern in der println-Methode zu schreiben, setzen wir i hinein. Denn i stellt in jedem Schleifendurchlauf eine andere Zahl dar. Und welche Zahlen sind das?
Im ersten Schleifendurchlauf ist i 0, weil wir i mit der 0 initialisiert haben. Im zweiten Durchlauf ist i 1, im dritten Schleifendurchlauf ist i 2 und dann sind wir auch bereits am Ende der Schleife angelangt.
Aber warum?
Das length-Attribut in Java
Weil wir oben names.length angegeben haben. Mit .length sprechen wir ein Attribut an, das auch wieder etwas mit dem Thema Objektorientierung zu tun hat. Es handelt sich dabei um ein Attribut von String, das uns die maximale Länge des Arrays ausgibt.
Da wir im Array die Zahl 3 angegeben haben, stellt length automatisch die Drei dar. Wenn wir also length verwenden, anstatt direkt die Zahl 3 in die for Schleife zu schreiben, müssen wir die Länge des Arrays lediglich oben ändern, wenn wir diese ändern möchten. Das hat den Vorteil, dass der Code so leichter wartbar ist.
Wenn wir das Programm nun ausführen, sehen wir in der Konsole dreimal „null“:
6. Was bedeutet null?
Null ist ein Wert, der immer dann zugewiesen wird, wenn man selbst seinen Objekten nichts zugewiesen hat. Auch das werden wir uns im Bereich der Objektorientierung noch genauer ansehen.
Merke dir einfach: Wenn null ausgegeben wird, hast du noch nichts zugewiesen.
Aus diesem Grund entfernen wir nun wieder die Kommentarzeichen, mit welchen wir vorhin unseren Code auskommentiert haben. Die println-Methode darunter lassen wir auskommentiert.
/*
names[0] = "Hendrik";
names[1] = "Paul";
names[2] = "Fabienne";
*/
Wenn wir das Programm jetzt noch einmal ausführen, sehen wir die Namen Hendrik, Paul und Fabienne in der Konsole:
Somit haben wir die for Schleife in Kombination mit dem Array verwendet!
Wie bereits gesagt: Wenn wir schon bei der Initialisierung die Zahl 4 anstatt der 3 zwischen die eckigen Klammern schreiben, hat das Array eine Größe von 4 Elementen und für den letzten nicht belegten Wert erhalten wir in der Ausgabe „null“:
String[] names = new String[4];
Weil names.length immer automatisch die Länge des Arrays einfügt, müssen wir diese nicht manuell an jeder Stelle im Code ändern. Je größer die Programme werden, desto praktischer ist es, auf diese Weise zu programmieren.
Damit hattest du eine kleine Einführung in die Thematik der Java Arrays.