Arrays Sammlungen fester Größe Das Piano

Transcrição

Arrays Sammlungen fester Größe Das Piano
Sammlungen fester Größe
• Manchmal ist die Größe der Sammlung
im Voraus bekannt.
• Programmiersprachen bieten meist
einen speziellen Typ für Sammlungen
fester Größe: ein array.
• Java arrays können Objekte oder
primitive Typen speichern.
• Arrays haben eine besondere Syntax.
Objektsammlungen:
Arrays
(und die for-Schleife)
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
Das Piano-Szenario
Eine normale Stringvariable
• Ein Bildschirmklavier (besteht –
hauptsächlich – aus einigen Tasten).
String name;
name = “Fred”;
String name
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
Array-Literale
Ein String-Array
String[] names;
names = new String[12];
String[] names = { “a”,“b”,“c”,“d”,“e”,“f”,“g”,“h”,“i”,“j”,“k”,“l”};
String [] names
String [] names
String[ ]
0
"Fred"
1
2
3
4
5
"a" "b" "c" "d" "e"
"f"
6
String[ ]
7
"g" "h"
8
9
10
11
"i"
"j"
"k"
"l"
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
0
1
2
3
4
5
"a" "b" "c" "d" "e"
"f"
6
7
"g" "h"
8
9
10
11
"i"
"j"
"k"
"l"
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
Array-Literale
Arraylänge
Deklaration und
Initialisierung
private int[] numbers = { 3, 15, 4, 5 };
private int[] numbers = { 3, 15, 4, 5 };
System.out.println(numbers[i]);
int n = numbers.length;
keine Klammern!
• Array-Literale können nur in Initialisierungen
verwendet werden.
• Beachte: ‘length’ ist keine Methode!!
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
Verwendung von Arrays
• Zugriff auf Arrayelemente mit eckigen
Klammern: names[...]
• Elemente können wie andere Variablen
benutzt werden.
– Auf der linken Seite einer Zuweisung:
Arrayelemente zuweisen
String[] names;
names = new String[12];
names[2] = “c”;
String [] names
names[i] = ...;
– In einem Ausdruck:
String[ ]
filename = names[i] + “.wav”;
0
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
1
2
3
4
5
"a" "b" "c" "d" "e"
"f"
6
7
"g" "h"
8
9
10
11
"i"
"j"
"k"
"l"
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
Arrayelemente lesen
Zuweisung und Zugriff
String [] names
names[2] = “c”;
names[i] = “x”;
String[ ]
0
1
2
3
4
5
"a" "b" "c" "d" "e"
"f"
6
7
"g" "h"
8
9
10
11
"i"
"j"
"k"
"l"
String element = names[4];
String otherElement = names[i];
String keyname;
keyname = names[3];
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
Standardnutzung von Arrays
private int[] hourCounts;
private String[] names;
Zeit zum Programmieren
Declaration
...
names = new String[12];
Erzeugung
...
hourcounts[i] = 0;
hourcounts[i]++;
System.out.println(hourcounts[i]);
Benutzung
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
Die for-Schleife
• Es gibt zwei Variationen der forSchleife, for-each und for.
• Die for-Schleife wird oft benutzt, um
eine feste Anzahl von Iterationen
durchzuführen.
• Oft mit einer Variablen, die sich bei
jeden Iteration um einen festen Betrag
ändert.
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
For-Schleife — Pseudocode
Standardform einer for-Schleife
for(initialisierung; bedingung; post-rumpf-aktion) {
Schleifenrumpf
}
Äquivalente while-Schleife
initialisierung;
while(bedingung) {
Schleifenrumpf
post-rumpf-aktion
}
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
Ein Java-Beispiel
for-Schleifen-Version
for(int hour = 0; hour < hourCounts.length; hour++) {
System.out.println(hour + ": " + hourCounts[hour]);
}
while -Schleifen-Version
int hour = 0;
while(hour < hourCounts.length) {
System.out.println(hour + ": " + hourCounts[hour]);
hour++;
}
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
Übung
• Ein Array ist gegeben. Geben Sie alle Zahlen
aus diesem Array aus. Benutzen Sie eine forSchleife.
int[] numbers = { 4, 1, 22, 9, 14, 3, 9};
for ...
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
For-Schleife mit größerem
Schritt
Übung
• Füllen Sie ein Array mit der Fibonacci-Folge.
// Print multiples of 3 that are below 40.
for(int num = 3; num < 40; num = num + 3) {
0 1 1 2 3 5 8 13 21 34 ...
System.out.println(num);
}
int[] fib = new int[100];
fib[0] = 0;
fib[1] = 1;
for ...
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
Zusammenfassung
• Arrays sind nützlich, wenn eine
Sammlung mit fester Größe gebraucht
wird.
• Arrays haben eine besondere Syntax.
• For-Schleifen bieten eine Alternative zu
while-Schleifen, wenn die Anzahl der
Iterationen bekannt ist.
• For-Schleifen werden benutzt, wenn
eine Indexvariable gebraucht wird.
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling
ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling

Documentos relacionados