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

 
(14 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 19: Zeile 19:


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 35: Zeile 56:
=== Über ein mehrdimensionales Array iterieren ===
=== Über ein mehrdimensionales Array iterieren ===


Um über Arrays mit mehreren Dimensionen zu iterieren nutzt du mehrere Zählschleifen ineinander.
Um über Arrays mit mehreren Dimensionen zu iterieren, nutzt du mehrere Zählschleifen ineinander.


<syntaxhighlight lang="Java" line="1">
<syntaxhighlight lang="Java" line="1">
int[][] zweidim = new int[4][4];
String[][] zweidim = new String[4][4];


for( int i = 0; i < zahlen.length; i++ ) {
for( int i = 0; i < zweidim .length; i++ ) {
     int[] innerArray = zahlen[i];
     String[] innerArray = zweidim [i];
     for( int j = 0; j < innerArray.length; j++ ) {
     if( innerArray != null ) { // Notwendig, falls inneres Array noch nicht initialisiert
        innerArray = "(" + i + "," + j + ")";
        for( int j = 0; j < innerArray.length; j++ ) {
            innerArray[j] = "(" + i + "," + j + ")";
        }
     }
     }
}
}
</syntaxhighlight>
</syntaxhighlight>


Der Quelltext erzeugt die folgende Matrix an Strings:
Der Quelltext erzeugt die folgende Tabelle/Matrix mit Strings:


{| class="wikitable text-center" style="margin:0 auto;"
{| class="wikitable text-center" style="margin:0 auto;"
Zeile 54: Zeile 77:
|-
|-
! 0
! 0
| (0,0) || (1,0) || (2,0) || (3,0)
| "(0,0)" || "(1,0)" || "(2,0)" || "(3,0)"
|-
|-
! 1
! 1
| (0,1) || (1,1) || (2,1) || (3,1)
| "(0,1)" || "(1,1)" || "(2,1)" || "(3,1)"
|-
|-
! 2
! 2
| (0,2) || (1,2) || (2,2) || (3,2)
| "(0,2)" || "(1,2)" || "(2,2)" || "(3,2)"
|-
|-
! 3
! 3
| (0,3) || (1,3) || (2,3) || (3,3)
| "(0,3)" || "(1,3)" || "(2,3)" || "(3,3)"
|}
|}


== Mehrdimensionale Objektarrays ==
{{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}}