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