8.581
Bearbeitungen
Jneug (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{{Navigation}} == Objektarrays == Arrays können nicht nur primitive Datentypen speichern, sondern auch komplexe Typen - also Objekte. Jedes Element ist dann…“) |
Jneug (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 14: | Zeile 14: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Der gezeigte Quelltext würde | Der gezeigte Quelltext würde etwa folgendes Array erzeugen: | ||
[[Datei:Java Objektarray.jpg|center|600px]] | [[Datei:Java Objektarray.jpg|center|600px]] | ||
Eine Änderung an dem Objekt <code>r1</code> kann hier mit <code>wuerfel[1]</code> oder <code>wuerfel[4]</code> erfolgen. | Eine Änderung an dem Objekt <code>r1</code> kann hier mit <code>wuerfel[1]</code> oder <code>wuerfel[4]</code> erfolgen. Der Inhalt des Index <code>5</code> ist <code>null</code>, da noch keine Objektinstanz zugewiesen wurde. | ||
=== Umgang mit Nullreferenzen === | === Umgang mit Nullreferenzen === | ||
Im Gegensatz zu | Im Gegensatz zu Variablen werden die Inhalte eines Objektarrays mit dem Wert <code>null</code> initialisiert, auch, wenn noch keine Zuweisung stattgefunden hat. | ||
<syntaxhighlight lang="Java"> | |||
// Objektreferenzen | |||
Random zufall; | |||
zufall.nextInt(); // Fehler: variable zufall might not have been initialized | |||
Random zufall2 = null; | |||
zufall2.nextInt(); // java.lang.NullPointerException: Cannot invoke "java.util.Random.nextInt()" because "zufall2" is null | |||
Random zufall3 = new Random(); | |||
zufall3.nextInt(); // Funktioniert | |||
// Objektarrays | |||
Random[] wuerfel; | |||
wuerfel[0].nextInt(); // Fehler: variable wuerfel might not have been initialized | |||
Random[] wuerfel2 = new Random[2]; | |||
wuerfel2[0].nextInt(); // java.lang.NullPointerException: Cannot invoke "java.util.Random.nextInt()" because "wuerfel2[0]" is null | |||
Random[] wuerfel3 = new Random[2]; | |||
wuerfel3[0] = new Random(); | |||
wuerfel3[0].nextInt(); // Funktioniert | |||
</syntaxhighlight> | |||
Das bedeutet, ein Objektarray enthält zu Beginn überall den Wert <code>null</code>. Wird ein Index nicht mit einer Objektreferenz initialisiert, dann bleibt dort immer der Wert <code>null</code> gespeichert. (Im Beispiel oben der Index <code>5</code>.) | |||
Wenn du nun mit einer Zählschleife über ein Objektarray iterierst, dann musst du vor dem Zugriff auf das Objekt prüfen, ob überhaupt ein Objekt vorhanden ist, oder nur <code>null</code>. | Wenn du nun mit einer Zählschleife über ein Objektarray iterierst, dann musst du vor dem Zugriff auf das Objekt prüfen, ob überhaupt ein Objekt vorhanden ist, oder nur <code>null</code>. | ||
Zeile 34: | Zeile 59: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Mehrdimensionale Arrays == | |||
Da ein Array selbst auch ein komplexer Datentyp ist, kann jedes Element in einem Array auch selber wieder ein Array sein. Das erlaubt die Erzeugung von zwei-, drei, oder n-dimensionalen Arrays. | |||
<syntaxhighlight lang="Java" line="1"> | |||
int[][][] dreidim = new int[3][3][3]; | |||
dreidim[0][0][0] = 1; | |||
dreidim[1][0][2] = 2; | |||
dreidim[2][2][2] = 3; | |||
</syntaxhighlight> | |||
Bei bis zu drei Dimensionen kann man sich das Array noch gut vorstellen (zweidimensional: Tabelle, dreidimensional: Würfel), aber ab vier Dimensionen wird die Handhabung sehr kompliziert. Arrays mit mehr als drei Dimensionen setzt man daher nur in Spezialfällen ein. | |||
=== Über ein mehrdimensionales Array iterieren === | |||
Um über Arrays mit mehreren Dimensionen zu iterieren, nutzt du mehrere ineinander verschachtelte Zählschleifen. | |||
<syntaxhighlight lang="Java" line="1"> | |||
String[][] zweidim = new String[4][4]; | |||
for( int i = 0; i < zweidim.length; i++ ) { | |||
String[] innerArray = zweidim[i]; | |||
for( int j = 0; j < innerArray.length; j++ ) { | |||
innerArray[j] = "(" + i + "," + j + ")"; | |||
} | |||
} | |||
</syntaxhighlight> | |||
Der Quelltext erzeugt die folgende Matrix an Strings: | |||
{| class="wikitable text-center" style="margin:0 auto;" | |||
! !! 0 !! 1 !! 2 !! 3 | |||
|- | |||
! 0 | |||
| "(0,0)" || "(1,0)" || "(2,0)" || "(3,0)" | |||
|- | |||
! 1 | |||
| "(0,1)" || "(1,1)" || "(2,1)" || "(3,1)" | |||
|- | |||
! 2 | |||
| "(0,2)" || "(1,2)" || "(2,2)" || "(3,2)" | |||
|- | |||
! 3 | |||
| "(0,3)" || "(1,3)" || "(2,3)" || "(3,3)" | |||
|} |
Bearbeitungen