Lernpfad:Objektorientierte Programmierung mit Java/Komplexe Arrays: Unterschied zwischen den Versionen

Zur Navigation springen Zur Suche springen
K
keine Bearbeitungszusammenfassung
(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…“)
 
KKeine Bearbeitungszusammenfassung
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 14: Zeile 14:
</syntaxhighlight>
</syntaxhighlight>


Der gezeigte Quelltext würde beispielsweise folgendes Array erzeugen:
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 primitiven Datentypen haben Objektreferenzen <code>null</code> als Initialwert. Das bedeutet, ein Objektarray enthält zu Beginn nur 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>.)
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)"
|}
8.581

Bearbeitungen

Navigationsmenü