Lernpfad:Objektorientierte Programmierung mit Java/Arrays: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Ngb (Diskussion | Beiträge) |
||
| (47 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
{{Navigation}} | {{Kurzlink|arrays}}{{Navigation}} | ||
'''Arrays''' (im Deutschen auch | '''Arrays''' (im Deutschen auch [[wikipedia:Feld_(Datentyp)|Felder]] genannt) erlauben es, Gruppen von Daten gleichen Typs in einer Variablen zu speichern. Bei der Initialisierung wird der ''Datentyp'' und die ''Anzahl der Werte'' (Größe des Arrays) festgelegt. Der Interpreter reserviert dann den [https://www.javamex.com/tutorials/memory/array_memory_usage.shtml nötigen Speicherplatz]. Ein Integer-Array der Größe 3 belegt 96 Bit (3 x {{Pfad|Datentypen und Variablen|32 Bit}}) plus 16 Bit für Statusinformationen (zum Beispiel die Größe des Arrays).<ref>Der exakte Speicherbedarf kann bei verschiedenen Laufzeitumgebungen unterschiedlich sein.</ref> | ||
== | == Deklaration == | ||
Ein neues Array kann mit dem Schlüsselwort <code>new</code> erzeugt werden: | |||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
// Deklaration eines Integer-Arrays der Größe 8 | // Deklaration eines Integer-Arrays der Größe 8 | ||
| Zeile 10: | Zeile 11: | ||
// String-Array der Größe 11 | // String-Array der Größe 11 | ||
String[] worte = new String[11]; | String[] worte = new String[11]; | ||
</syntaxhighlight> | |||
Sind die Elemente des Arrays fest und bekannt, dann kann eine ''Kurzform'' zur Deklaration genutzt werden: | |||
<syntaxhighlight lang="java"> | |||
// Deklaration eines Integer-Arrays der Größe 4 mit den Werten 5,6,7 und 8 | |||
int[] zahlen = {5, 6, 7, 8}; | |||
// String-Array der Größe 5 | |||
String[] worte = {"a", "b", "c", "d", "e"}; | |||
</syntaxhighlight> | |||
Soll das Array nicht in einer Variablen gespeichert werden, sondern zum Beispiel nur als Parameter in einem Methodenaufruf genutzt werden, dann kann diese Form genutzt werden: | |||
<syntaxhighlight lang="java"> | |||
taschenrechner.addiere(new int[]{5, 6, 7, 8}); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 20: | Zeile 36: | ||
== Zugriffe und Zuweisungen == | == Zugriffe und Zuweisungen == | ||
Der Zugriff auf die Elemente eines Arrays erfolgt über einen Index. Dabei bekommt das erste Element den Index 0, das Zweite den Index 1 und so weiter. In einem Array der Größe <code>n</code> hat das letzte Element also den Index <code>n-1</code>. | Der Zugriff auf die Elemente eines Arrays erfolgt über einen Index. Dabei bekommt das erste Element den Index 0, das Zweite den Index 1, und so weiter. In einem Array der Größe <code>n</code> hat das letzte Element also den Index <code>n-1</code>. | ||
{{Schublade|Man könnte auch sagen, dass jedes Element in einem Array durch seinen Abstand zum ersten Element beschrieben ist.|Farbe={{Farbe:Info}}}} | {{Schublade|Man könnte auch sagen, dass jedes Element in einem Array durch seinen Abstand zum ersten Element beschrieben ist.|Farbe={{Farbe:Info}}}} | ||
{| class="wikitable text-center" | {| class="wikitable text-center" style="margin:0 auto;" | ||
|+ Adressierung in einem Array mit Namen "feld" | |+ Adressierung in einem Array mit Namen "feld" | ||
|- | |- | ||
| Zeile 41: | Zeile 57: | ||
int[] zahlen = new int[8]; | int[] zahlen = new int[8]; | ||
zahlen[0] = 133; // Zuweisung zum | zahlen[0] = 133; // Zuweisung zum ersten Element mit dem Index 0 | ||
zahlen[1] = 501; // Zuweisung zum zweiten Element mit dem Index 1 | zahlen[1] = 501; // Zuweisung zum zweiten Element mit dem Index 1 | ||
| Zeile 49: | Zeile 65: | ||
Zugriffe mit Indizes außerhalb des gültigen Bereichs (also <code>i < 0</code> oder <code>i > length</code>) produzieren einen [https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html Fehler]. | Zugriffe mit Indizes außerhalb des gültigen Bereichs (also <code>i < 0</code> oder <code>i > length</code>) produzieren einen [https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html Fehler]. | ||
{{Aufgabe:Start}} | {{Aufgabe:Start}} | ||
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.<br /> '''Wichtig:''' Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). ''Das Array ändert sich in dem Fall also nicht.'' | |||
<syntaxhighlight lang="java"> | |||
int[] zahlen = new int[6]; | int[] zahlen = new int[6]; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
!Inhalt | <lückentext> | ||
| || | {| class="wikitable text-center code" | ||
! Inhalt | |||
| '''0()''' || '''0()''' || '''0()''' || '''0()''' || '''0()''' || '''0()''' | |||
|- | |- | ||
!Index | ! Index | ||
| || | | 0 || 1 || 2 || 3 || 4 || 5 | ||
|} | |||
</lückentext> | |||
<syntaxhighlight lang="java"> | |||
zahlen[4] = 4; | |||
</syntaxhighlight> | |||
<lückentext> | |||
{| class="wikitable text-center code" | |||
! Inhalt | |||
| '''0()''' || '''0()''' || '''0()''' || '''0()''' || '''4()''' || '''0()''' | |||
|- | |- | ||
| | ! Index | ||
zahlen[ | | 0 || 1 || 2 || 3 || 4 || 5 | ||
|} | |||
</lückentext> | |||
<syntaxhighlight lang="java"> | |||
zahlen[5] = 5; | |||
zahlen[6] = 6; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
!Inhalt | <lückentext> | ||
| || | {| class="wikitable text-center code" | ||
! Inhalt | |||
| '''0()''' || '''0()''' || '''0()''' || '''0()''' || '''4()''' || '''0()''' | |||
|- | |- | ||
!Index | ! Index | ||
| || | | 0 || 1 || 2 || 3 || 4 || 5 | ||
|} | |||
</lückentext> | |||
<syntaxhighlight lang="java"> | |||
zahlen[2] = zahlen[4] + 6; | |||
zahlen[1] = zahlen[2] - 1; | |||
zahlen[0] = zahlen[1] - 1; | |||
</syntaxhighlight> | |||
<lückentext> | |||
{| class="wikitable text-center code" | |||
! Inhalt | |||
| '''8()''' || '''9()''' || '''10()''' || '''0()''' || '''4()''' || '''0()''' | |||
|- | |- | ||
| | ! Index | ||
| 0 || 1 || 2 || 3 || 4 || 5 | |||
zahlen[ | |} | ||
</lückentext> | |||
<syntaxhighlight lang="java"> | |||
if( zahlen[3] == 0 && zahlen[0] == 0 ) { | |||
zahlen[5] = zahlen[2] / 2; | |||
} else { | |||
zahlen[5] = zahlen[0] + zahlen[3]; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
!Inhalt | <lückentext> | ||
| || || || || || | {| class="wikitable text-center code" | ||
! Inhalt | |||
| '''8()''' || '''9()''' || '''10()''' || '''0()''' || '''4()''' || '''8()''' | |||
|- | |||
! Index | |||
| 0 || 1 || 2 || 3 || 4 || 5 | |||
|} | |||
</lückentext> | |||
<syntaxhighlight lang="java"> | |||
zahlen[3] = zahlen.length; | |||
</syntaxhighlight> | |||
<lückentext> | |||
{| class="wikitable text-center code" | |||
! Inhalt | |||
| '''8()''' || '''9()''' || '''10()''' || '''6()''' || '''4()''' || '''8()''' | |||
|- | |- | ||
!Index | ! Index | ||
| || | | 0 || 1 || 2 || 3 || 4 || 5 | ||
|} | |} | ||
</lückentext> | |||
{{Aufgabe:End}} | {{Aufgabe:End}} | ||
{{Lösung:Start}} | {{Lösung:Start}} | ||
{| class=" | 1. | ||
{| class="wikitable code text-center" | |||
!Inhalt | !Inhalt | ||
| 0 || 0 || 0 || 0 || 0 || 0 | | 0 || 0 || 0 || 0 || 0 || 0 | ||
|- | |- | ||
!Index | !Index | ||
| | |width="30px"|0 | ||
|width="30px"|1 | |||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
2. | |||
{| class="wikitable code text-center" | |||
!Inhalt | |||
| 0 || 0 || 0 || 0 || 4 || 0 | |||
|- | |- | ||
| | !Index | ||
zahlen[ | |width="30px"|0 | ||
</ | |width="30px"|1 | ||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
3. Das Array hat die Größe 6 und gültige Indizes für die Elemente sind <code>0,1,2,3,4,5</code>. Die Zuweisung <code>zahlen[6] = 6</code> erzeugt einen Fehler, da <code>6</code> kein gültiger Index ist. | |||
4. | |||
{| class="wikitable code text-center" | |||
!Inhalt | !Inhalt | ||
| | | 8 || 9 || 10 || 0 || 4 || 0 | ||
|- | |- | ||
!Index | !Index | ||
| | |width="30px"|0 | ||
|width="30px"|1 | |||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
5. | |||
{| class="wikitable code text-center" | |||
!Inhalt | |||
| 8 || 9 || 10 || 0 || 4 || 8 | |||
|- | |- | ||
| | !Index | ||
|width="30px"|0 | |||
|width="30px"|1 | |||
} | |width="30px"|2 | ||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
6. | |||
{| class="wikitable code text-center" | |||
!Inhalt | !Inhalt | ||
| | | 8 || 9 || 10 || 6 || 4 || 8 | ||
|- | |- | ||
!Index | !Index | ||
| | |width="30px"|0 | ||
|width="30px"|1 | |||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |} | ||
{{Lösung:End}} | {{Lösung:End}} | ||
== Über ein Array iterieren == | == Über ein Array iterieren == | ||
Da man oft die Größe eines Arrays im Vorfeld nicht kennt, muss man häufig mit einer Zählschleife ''über das Array iterieren'', um Aktionen auf oder mit den Elementen auszuführen. ''Iterieren'' bedeutet hier, | Da man oft die Größe eines Arrays im Vorfeld nicht kennt, muss man häufig mit einer Zählschleife ''über das Array iterieren'', um Aktionen auf oder mit den Elementen auszuführen. [[wikipedia:Iteration#Informatik|''Iterieren'']] bedeutet hier, auf die Elemente des Arrays vom ersten bis zum letzten Schritt für Schritt zuzugreifen (es zu "durchlaufen"). Dazu kann man jedes Schleifenkonstrukt benutzen, üblich ist aber eine Zählschleife, da sie direkt einen Zähler für den Index bereitstellt. | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
// Zählschleife von 0 bis zahlen.length | // Zählschleife von 0 bis zahlen.length | ||
| Zeile 125: | Zeile 227: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Aufgabe:Start}} | |||
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.<br>Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht. | |||
{| class="wikitable code text-center" | |||
!Inhalt | |||
| 8 || 9 || 10 || 6 || 4 || 8 | |||
|- | |||
!Index | |||
|width="30px"|0 | |||
|width="30px"|1 | |||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
<syntaxhighlight lang="java"> | |||
for( int i = 0; i < zahlen.length; i++ ) { | |||
zahlen[i] = 10 + zahlen[i]; | |||
} | |||
</syntaxhighlight> | |||
<lückentext> | |||
{| class="wikitable text-center code" | |||
! Inhalt | |||
| '''18()''' || '''19()''' || '''20()''' || '''16()''' || '''14()''' || '''18()''' | |||
|- | |||
! Index | |||
| 0 || 1 || 2 || 3 || 4 || 5 | |||
|} | |||
</lückentext> | |||
<syntaxhighlight lang="java"> | |||
for( int i = 0; i < zahlen.length; i++ ) { | |||
zahlen[i] = 10 + i; | |||
} | |||
</syntaxhighlight> | |||
<lückentext> | |||
{| class="wikitable text-center code" | |||
! Inhalt | |||
| '''10()''' || '''11()''' || '''12()''' || '''13()''' || '''14()''' || '''15()''' | |||
|- | |||
! Index | |||
| 0 || 1 || 2 || 3 || 4 || 5 | |||
|} | |||
</lückentext> | |||
<syntaxhighlight lang="java"> | |||
for( int i = 0; i < zahlen.length; i++ ) { | |||
zahlen[i] = zahlen[2] + i; | |||
} | |||
</syntaxhighlight> | |||
<lückentext> | |||
{| class="wikitable text-center code" | |||
! Inhalt | |||
| '''12()''' || '''13()''' || '''14()''' || '''17()''' || '''18()''' || '''19()''' | |||
|- | |||
! Index | |||
| 0 || 1 || 2 || 3 || 4 || 5 | |||
|} | |||
</lückentext> | |||
<syntaxhighlight lang="java"> | |||
for( int i = zahlen.length; i > 0; i-- ) { | |||
zahlen[i-1] = zahlen[i]; | |||
} | |||
</syntaxhighlight> | |||
<lückentext> | |||
{| class="wikitable text-center code" | |||
! Inhalt | |||
| '''12()''' || '''13()''' || '''14()''' || '''17()''' || '''18()''' || '''19()''' | |||
|- | |||
! Index | |||
| 0 || 1 || 2 || 3 || 4 || 5 | |||
|} | |||
</lückentext> | |||
<syntaxhighlight lang="java"> | |||
for( int i = 1; i < zahlen.length; i += 2 ) { | |||
zahlen[i] = zahlen[i-1]; | |||
} | |||
</syntaxhighlight> | |||
<lückentext> | |||
{| class="wikitable text-center code" | |||
! Inhalt | |||
| '''12()''' || '''12()''' || '''14()''' || '''14()''' || '''18()''' || '''18()''' | |||
|- | |||
! Index | |||
| 0 || 1 || 2 || 3 || 4 || 5 | |||
|} | |||
</lückentext> | |||
<syntaxhighlight lang="java"> | |||
for( int i = zahlen.length-1; i > 0; i -= 1 ) { | |||
zahlen[i] = zahlen[i]/2; | |||
} | |||
</syntaxhighlight> | |||
<lückentext> | |||
{| class="wikitable text-center code" | |||
! Inhalt | |||
| '''12()''' || '''6()''' || '''7()''' || '''7()''' || '''9()''' || '''9()''' | |||
|- | |||
! Index | |||
| 0 || 1 || 2 || 3 || 4 || 5 | |||
|} | |||
</lückentext> | |||
{{Aufgabe:End}} | |||
{{Lösung:Start}} | |||
1. | |||
{| class="wikitable code text-center" | |||
!Inhalt | |||
| 18 || 19 || 20 || 16 || 14 || 18 | |||
|- | |||
!Index | |||
|width="30px"|0 | |||
|width="30px"|1 | |||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
2. | |||
{| class="wikitable code text-center" | |||
!Inhalt | |||
| 10 || 11 || 12 || 13 || 14 || 15 | |||
|- | |||
!Index | |||
|width="30px"|0 | |||
|width="30px"|1 | |||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
3. | |||
{| class="wikitable code text-center" | |||
!Inhalt | |||
| 12 || 13 || 14 || 17 || 18 || 19 | |||
|- | |||
!Index | |||
|width="30px"|0 | |||
|width="30px"|1 | |||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
4. | |||
{| class="wikitable code text-center" | |||
!Inhalt | |||
| 12 || 13 || 14 || 17 || 18 || 19 | |||
|- | |||
!Index | |||
|width="30px"|0 | |||
|width="30px"|1 | |||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
5. | |||
{| class="wikitable code text-center" | |||
!Inhalt | |||
| 12 || 12 || 14 || 14 || 18 || 18 | |||
|- | |||
!Index | |||
|width="30px"|0 | |||
|width="30px"|1 | |||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
6. | |||
{| class="wikitable code text-center" | |||
!Inhalt | |||
| 12 || 6 || 7 || 7 || 9 || 9 | |||
|- | |||
!Index | |||
|width="30px"|0 | |||
|width="30px"|1 | |||
|width="30px"|2 | |||
|width="30px"|3 | |||
|width="30px"|4 | |||
|width="30px"|5 | |||
|} | |||
{{Lösung:End}} | |||
== Übungen == | |||
{{Aufgabe:Start}} | {{Aufgabe:Start}} | ||
# Erstelle eine Klasse <code>Zufall</code> mit einem Attribut <code>zufallszahlen</code>, das ein Integer-Array speichert. Das Array soll im Konstruktor initialisiert werden, wobei die Größe des Arrays dem Konstruktor als Parameter übergeben wird. | # Erstelle eine Klasse <code>Zufall</code> mit einem Attribut <code>zufallszahlen</code>, das ein Integer-Array speichert. Das Array soll im Konstruktor initialisiert werden, wobei die Größe des Arrays dem Konstruktor als Parameter übergeben wird. | ||
# Implementiere eine Methode <code>public void zahlenGenerieren()</code>, die das Array mit Zufallszahlen zwischen 1 und 100 befüllt. | # Implementiere eine Methode <code>public void zahlenGenerieren()</code>, die das Array mit [[Lernpfad:Würfelspiel_in_Java/Zufallszahlen_generieren|Zufallszahlen]] zwischen 1 und 100 befüllt. | ||
# Implementiere eine Methode <code>public void ausgeben()</code>, die über das Array iteriert und die Elemente auf der | # Implementiere eine Methode <code>public void ausgeben()</code>, die über das Array iteriert und die Elemente auf der [[Lernpfad:Würfelspiel in Java/Ein- und Ausgabe auf der Kommandozeile|Kommandozeile]] ausgibt. | ||
# Implementiere eine Methode <code>public boolean suchen(int pZahl)</code>, die prüft, ob <code>pZahl</code> im Array enthalten ist. | # Implementiere eine Methode <code>public boolean suchen(int pZahl)</code>, die prüft, ob <code>pZahl</code> im Array enthalten ist. | ||
{{Aufgabe:End}} | {{Aufgabe:End}} | ||
| Zeile 206: | Zeile 491: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Lösung:End}} | {{Lösung:End}} | ||
{{Inhalt/Übersicht}} | |||
Aktuelle Version vom 22. August 2023, 21:10 Uhr
Diese Seite ist auch erreichbar unter link.ngb.schule/arrays
Arrays (im Deutschen auch Felder genannt) erlauben es, Gruppen von Daten gleichen Typs in einer Variablen zu speichern. Bei der Initialisierung wird der Datentyp und die Anzahl der Werte (Größe des Arrays) festgelegt. Der Interpreter reserviert dann den nötigen Speicherplatz. Ein Integer-Array der Größe 3 belegt 96 Bit (3 x 32 Bit) plus 16 Bit für Statusinformationen (zum Beispiel die Größe des Arrays).[1]
Deklaration
Ein neues Array kann mit dem Schlüsselwort new erzeugt werden:
// Deklaration eines Integer-Arrays der Größe 8
int[] zahlen = new int[8];
// String-Array der Größe 11
String[] worte = new String[11];
Sind die Elemente des Arrays fest und bekannt, dann kann eine Kurzform zur Deklaration genutzt werden:
// Deklaration eines Integer-Arrays der Größe 4 mit den Werten 5,6,7 und 8
int[] zahlen = {5, 6, 7, 8};
// String-Array der Größe 5
String[] worte = {"a", "b", "c", "d", "e"};
Soll das Array nicht in einer Variablen gespeichert werden, sondern zum Beispiel nur als Parameter in einem Methodenaufruf genutzt werden, dann kann diese Form genutzt werden:
taschenrechner.addiere(new int[]{5, 6, 7, 8});
Die Größe eines Arrays kann jederzeit über das length Attribut abgefragt werden.
int[] zahlen = new int[7];
zahlen.length; // 7
Zugriffe und Zuweisungen
Der Zugriff auf die Elemente eines Arrays erfolgt über einen Index. Dabei bekommt das erste Element den Index 0, das Zweite den Index 1, und so weiter. In einem Array der Größe n hat das letzte Element also den Index n-1.
Man könnte auch sagen, dass jedes Element in einem Array durch seinen Abstand zum ersten Element beschrieben ist.
| Element | 1 | 2 | 3 | ... | i | ... | n-1 | n |
|---|---|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | ... | i-1 | ... | n-2 | n-1 |
| Zugriff | feld[0] | feld[1] | feld[2] | ... | feld[i-1] | ... | feld[feld.length-2] | feld[feld.length-1] |
Zuweisungen und Zugriffe erfolgen auch mit eckigen Klammern, wie bei der Deklaration.
int[] zahlen = new int[8];
zahlen[0] = 133; // Zuweisung zum ersten Element mit dem Index 0
zahlen[1] = 501; // Zuweisung zum zweiten Element mit dem Index 1
zahlen[0] + zahlen[1]; // Zugriff auf die Elemente mit Index 0 und 1
Zugriffe mit Indizes außerhalb des gültigen Bereichs (also i < 0 oder i > length) produzieren einen Fehler.
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.
Wichtig: Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich in dem Fall also nicht.
int[] zahlen = new int[6];
| Inhalt | 0() | 0() | 0() | 0() | 0() | 0() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
zahlen[4] = 4;
| Inhalt | 0() | 0() | 0() | 0() | 4() | 0() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
zahlen[5] = 5;
zahlen[6] = 6;
| Inhalt | 0() | 0() | 0() | 0() | 4() | 0() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
zahlen[2] = zahlen[4] + 6;
zahlen[1] = zahlen[2] - 1;
zahlen[0] = zahlen[1] - 1;
| Inhalt | 8() | 9() | 10() | 0() | 4() | 0() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
if( zahlen[3] == 0 && zahlen[0] == 0 ) {
zahlen[5] = zahlen[2] / 2;
} else {
zahlen[5] = zahlen[0] + zahlen[3];
}
| Inhalt | 8() | 9() | 10() | 0() | 4() | 8() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
zahlen[3] = zahlen.length;
| Inhalt | 8() | 9() | 10() | 6() | 4() | 8() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
1.
| Inhalt | 0 | 0 | 0 | 0 | 0 | 0 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
2.
| Inhalt | 0 | 0 | 0 | 0 | 4 | 0 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
3. Das Array hat die Größe 6 und gültige Indizes für die Elemente sind 0,1,2,3,4,5. Die Zuweisung zahlen[6] = 6 erzeugt einen Fehler, da 6 kein gültiger Index ist.
4.
| Inhalt | 8 | 9 | 10 | 0 | 4 | 0 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
5.
| Inhalt | 8 | 9 | 10 | 0 | 4 | 8 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
6.
| Inhalt | 8 | 9 | 10 | 6 | 4 | 8 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
Über ein Array iterieren
Da man oft die Größe eines Arrays im Vorfeld nicht kennt, muss man häufig mit einer Zählschleife über das Array iterieren, um Aktionen auf oder mit den Elementen auszuführen. Iterieren bedeutet hier, auf die Elemente des Arrays vom ersten bis zum letzten Schritt für Schritt zuzugreifen (es zu "durchlaufen"). Dazu kann man jedes Schleifenkonstrukt benutzen, üblich ist aber eine Zählschleife, da sie direkt einen Zähler für den Index bereitstellt.
// Zählschleife von 0 bis zahlen.length
// Die Zählvariable i durchläuft alle Indizes des Arrays
// Das Attribut "length" eines Arrays enthält seine Größe
for( int i = 0; i < zahlen.length; i += 1 ) {
System.out.println(zahlen[i]);
}
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.
Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.
| Inhalt | 8 | 9 | 10 | 6 | 4 | 8 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
for( int i = 0; i < zahlen.length; i++ ) {
zahlen[i] = 10 + zahlen[i];
}
| Inhalt | 18() | 19() | 20() | 16() | 14() | 18() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
for( int i = 0; i < zahlen.length; i++ ) {
zahlen[i] = 10 + i;
}
| Inhalt | 10() | 11() | 12() | 13() | 14() | 15() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
for( int i = 0; i < zahlen.length; i++ ) {
zahlen[i] = zahlen[2] + i;
}
| Inhalt | 12() | 13() | 14() | 17() | 18() | 19() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
for( int i = zahlen.length; i > 0; i-- ) {
zahlen[i-1] = zahlen[i];
}
| Inhalt | 12() | 13() | 14() | 17() | 18() | 19() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
for( int i = 1; i < zahlen.length; i += 2 ) {
zahlen[i] = zahlen[i-1];
}
| Inhalt | 12() | 12() | 14() | 14() | 18() | 18() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
for( int i = zahlen.length-1; i > 0; i -= 1 ) {
zahlen[i] = zahlen[i]/2;
}
| Inhalt | 12() | 6() | 7() | 7() | 9() | 9() |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
1.
| Inhalt | 18 | 19 | 20 | 16 | 14 | 18 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
2.
| Inhalt | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
3.
| Inhalt | 12 | 13 | 14 | 17 | 18 | 19 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
4.
| Inhalt | 12 | 13 | 14 | 17 | 18 | 19 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
5.
| Inhalt | 12 | 12 | 14 | 14 | 18 | 18 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
6.
| Inhalt | 12 | 6 | 7 | 7 | 9 | 9 |
|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
Übungen
- Erstelle eine Klasse
Zufallmit einem Attributzufallszahlen, das ein Integer-Array speichert. Das Array soll im Konstruktor initialisiert werden, wobei die Größe des Arrays dem Konstruktor als Parameter übergeben wird. - Implementiere eine Methode
public void zahlenGenerieren(), die das Array mit Zufallszahlen zwischen 1 und 100 befüllt. - Implementiere eine Methode
public void ausgeben(), die über das Array iteriert und die Elemente auf der Kommandozeile ausgibt. - Implementiere eine Methode
public boolean suchen(int pZahl), die prüft, obpZahlim Array enthalten ist.
import java.util.Random;
public class Zufall {
// Deklaration des Integer-Arrays
private int[] zufallszahlen;
/**
* Konstruktor der Klasse Zufall.
* @param pAnzahl Größe des Zufallszahlen-Speichers.
*/
public Zufall( int pAnzahl ) {
// Initialisierung des Integer-Arrays mit der
// im Parameter übergebenen Größe.
// Ist die Anzahl negativ wird sie durch
// multiplikation mit -1 positiv gemacht.
if( pAnzahl > 0 ) {
zufallszahlen = new int[pAnzahl];
} else {
zufallszahlen = new int[pAnzahl * -1];
}
}
/**
* Befüllt den Speicher mit Zufallszahlen.
* @see java.util.Random
*/
public void zahlenGenerieren() {
// Instanziieren der Random-Klasse.
Random r = new Random();
// Mit einer Zählvariablen i für den Index der
// Array-Elemente über das Array iterieren.
for( int i = 0; i < zufallszahlen.length; i++ ) {
// Generieren einer Zufallszahl zwischen 0 und 100.
// Da 100 nicht eingeschlossen wird, wird durch Addition
// von 1 der Bereich von 1 bis 100 (inklusive) verschoben.
zufallszahlen[i] = r.nextInt(100) + 1;
}
}
/**
* Gibt die Zufallszahlen im Speicher auf die Konsole aus.
*/
public void ausgeben() {
// Mit einer Zählvariablen i für den Index der
// Array-Elemente über das Array iterieren.
for( int i = 0; i < zufallszahlen.length; i++ ) {
System.out.printf("Zufallszahl %d: %d\n", i, zufallszahlen[i]);
}
}
/**
* Sucht im Speicher nach einer Zahl und gibt zurück,
* ob die Zahl vorhanden ist.
* @param pZahl Die Zahl, nach der gesucht werden soll.
* @return Wahr, wenn die Zahl gefunden wurde.
*/
public boolean suchen( int pZahl ) {
// Mit einer Zählvariablen i für den Index der
// Array-Elemente über das Array iterieren.
for( int i = 0; i < zufallszahlen.length; i++ ) {
if( zufallszahlen[i] == pZahl ) {
// Zahl gefunden
return true;
}
}
// Wenn der Algorithmus hier ankommt heißt das:
// Zahl nicht gefunden
return false;
}
}
Klassen und Objekte | Compiler und Interpreter | BlueJ | Syntax und Semantik | Datentypen und Variablen | Objektvariablen | Methoden | Parameter und Rückgaben | Objekte erstellen | Der Konstruktor | Referenzen | Klassenmethoden | Klassen der Java-Bibliothek | Systematisch Fehler suchen | Arrays | Komplexe Arrays | Vererbung | Abstrakte Klassen | Interfaces | Generische Typen | Fehlerbehandlung
- ↑ Der exakte Speicherbedarf kann bei verschiedenen Laufzeitumgebungen unterschiedlich sein.