Lernpfad:Einführung in Git/11: Unterschied zwischen den Versionen

(Die Seite wurde neu angelegt: „{{NNavigation}} == Objektarrays == Arrays können nicht nur primitive Datentypen speichern, sondern auch Objekte. Jedes Element ist dann eine Referenz auf ei…“)
 
 
(20 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{NNavigation}}
{{NNavigation}}__NOTOC__


== Objektarrays ==
== Objektarrays ==


Arrays können nicht nur primitive Datentypen speichern, sondern auch Objekte. Jedes Element ist dann eine Referenz auf eine Objektinstanz der deklarierten Klasse. Dabei können einzelne Indizes des Arrays auch auf dasselbe Objekt referenzieren. Ein Array ist aber auf Objekte einer Klasse beschränkt, die bei der Deklaration angegeben werden muss.
Arrays können nicht nur ''primitive Datentypen'' speichern, sondern auch Objekte. Jedes Element ist dann eine Referenz auf eine Objektinstanz der deklarierten Klasse. Dabei können einzelne Indizes des Arrays auch auf dasselbe Objekt referenzieren. Ein Array ist aber auf Objekte einer Klasse beschränkt, die bei der Deklaration angegeben werden muss.


<syntaxhighlight lang="Java" line="1">
<syntaxhighlight lang="Java">
Random[] wuerfel = new Random[6];
Random[] wuerfel = new Random[6];
wuerfel[4] = new Random();
wuerfel[4] = new Random();
Zeile 16: Zeile 16:
Der gezeigte Quelltext würde beispielsweise folgendes Array erzeugen:
Der gezeigte Quelltext würde beispielsweise folgendes Array erzeugen:


[[Datei:Java Objektarray.jpg|center]]
[[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.
=== 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>.)
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>.
<syntaxhighlight lang="Java" highlight="3,5">
for(int i = 0; i < wuerfel.length; i++) {
    Wuerfel w = wuerfel[i];
    if( w != null ) {
        w.werfen();
    }
}
</syntaxhighlight>
{{Aufgabe:Start|Icon=BlueJ Logo.png}}
# Erstelle einen Fork des Projekts "arrays2" und öffne es in {{BlueJ}}.
# Analysiere die Methode <code>public void objectArrayExample()</code> und führe sie aus.
# Implementiere die Methoden <code>public void rollAll(Wuerfel[])</code> und <code>public int diceSum(Wuerfel[])</code>.
{{Aufgabe:End}}


== Mehrdimensionale Arrays ==
== Mehrdimensionale Arrays ==
Zeile 26: Zeile 47:
<syntaxhighlight lang="Java" line="1">
<syntaxhighlight lang="Java" line="1">
int[][][] dreidim = new int[3][3][3];
int[][][] dreidim = new int[3][3][3];
int[0][0][0] = 1;
dreidim[0][0][0] = 1;
int[2][2][2] = 1;
dreidim[1][0][2] = 2;
dreidim[2][2][2] = 3;
</syntaxhighlight>
</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 Zählschleifen ineinander.
<syntaxhighlight lang="Java" line="1">
String[][] zweidim = new String[4][4];
for( int i = 0; i < zweidim .length; i++ ) {
    String[] innerArray = zweidim [i];
    if( innerArray != null ) { // Notwendig, falls inneres Array noch nicht initialisiert
        for( int j = 0; j < innerArray.length; j++ ) {
            innerArray[j] = "(" + i + "," + j + ")";
        }
    }
}
</syntaxhighlight>
Der Quelltext erzeugt die folgende Tabelle/Matrix mit 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)"
|}
{{Aufgabe:Start|Icon=BlueJ Logo.png}}
# Implementiere die Methoden <code>public void twoDimRoll(Wuerfel[][])</code> und <code>public int twoDimSum(Wuerfel[][])</code>.
# Implementiere die Methode <code>public int[] rowSum(Wuerfel[][])</code>.
{{Aufgabe:End}}