CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002 Felder (Arrays) Array: Indizes: Nicole Melanie Natalie Shaznay 0 1 2 3 String[ ] allSaints; allSaints = new String[ 4 ]; Deklariert allSaints als Bezeichner Initialisiert allSaints als Array, das heißt allSaints[0] etc. als Bezeichner! allSaints[0] = "Nicole"; allSaints[1] = "Melanie"; allSaints[2] = "Natalie"; allSaints[3] = "Shaznay"; Nun werden die Elemente des Arrays initialisiert. 28. Oktober 2002 CuP WS 2002/2003 2 Felder Ein Feld (Arrray) ist ein Objekt, das aus numerierten Elementen besteht, die denselben Typ haben. Die Länge eines Feldes wird bei der Initialisierung festgelegt und kann dann nicht mehr verändert werden. Die Elemente des Arrays können aber verändert werden. Auf die Länge kann man durch denArrayNamen.length zugreifen. Die Elemente eines Arrays können auch Objekte sein. 28. Oktober 2002 CuP WS 2002/2003 3 Weitere Eigenschaften von Feldern Die Elemente eines Feldes sind, mit 0 beginnend, durchnumeriert. Diese Nummern heißen Indizes. Man kann über die Indizes auf die Elemente der Felder zugreifen, und zwar mit Hilfe des Operators [ ] Fragen: Welchen Wert hat allSaints.length? Ist length eine Methode oder ein Attribut? 28. Oktober 2002 CuP WS 2002/2003 4 Fragen: Was gibt folgendes Programm aus? public class Saints{ public static void main(String[] args){ String[ ] allSaints; allSaints = new String[ 4 ]; allSaints[1] = "Melanie"; allSaints[2] = "Natalie"; allSaints[3] = "Shaznay"; System.out.println(allSaints[1]); System.out.println(allSaints[0]); } } 28. Oktober 2002 CuP WS 2002/2003 5 Noch ein Beispiel Array: Indizes: 10 15 0 30 0 0 8 0 1 2 3 4 5 6 int [ ] schneeFall; schneeFall = new int[ 7 ]; schneeFall[0] = 10; schneeFall[1] = 15; schneeFall[2] = 0; ... schneeFall[6] = 8; 28. Oktober 2002 CuP WS 2002/2003 6 Anwendung Berechnung des Wochenschneefalls: Den Code dazu sollten sie selbst schreiben können. Wie glauben Sie? So: int summe; summe = schneeFall[0] + schneeFall[1] + schneeFall[2] + schneeFall[3] + schneeFall[4] + schneeFall[5] + schneeFall[6] Oder so: int summe = 0; for(int s = 0; s < schneeFall.length; s++){ summe = summe + schneeFall[s]; } 28. Oktober 2002 CuP WS 2002/2003 7 Ein weiteres Beispiel public class Feld{ public static void main(String [ ] args){ String [ ] tag; tag = new String[7]; tag[0] = "Sonntag"; tag[1] = "Montag"; tag[2] = "Dienstag"; tag[3] = "Mittwoch"; tag[4] = "Donnerstag"; tag[5] = "Freitag"; tag[6] = "Samstag"; 28. Oktober 2002 CuP WS 2002/2003 8 Fortsetzung des Beispiels for ( int i = 0; i < 7; i++) { System.out.print ( tag[ i ] + ", "); } } } Ausgabe: ? 28. Oktober 2002 CuP WS 2002/2003 9 Felder - Deklaration durch eine Liste public class Liste { public static void main(String[ ] args){ int[ ] gewinn = {22, 18, 0, 25}; System.out.println(gewinn[0]); } } Ausgabe? Wie könnte man mit dieser Methode allSaints initialisieren? 28. Oktober 2002 CuP WS 2002/2003 10 Noch ein Selbsttest: Was gibt folgendes Programm nach dem Aufruf java Feldtest Bald kommt der Nikolaus! aus? public class Feldtest { public static void main(String[ ] args){ System.out.println(args.length); } } 28. Oktober 2002 CuP WS 2002/2003 11 Felder von Objekten Die Elemente eines Arrays können auch Objekte sein, zum Beispiel Objekte der Klasse Turm: Turm[ ] turm; turm = new Turm[1000]; Initialisierung durch Anweisungen der Form turm[i] = new Turm(); 28. Oktober 2002 CuP WS 2002/2003 12 Wieviele Türme mit welchen Höhen werden von folgendem Programm gebaut? public class Turmbau{ public static void main(String args[ ]){ Turm[ ] turm = new Turm[1000]; for( int i = 0; i < 1000; i++){ turm[i] = new Turm(); System.out.print (turm[i].hoehe) ; } } } Ausgabe? Wie kann man auf die Höhen der Tuerme zugreifen? 28. Oktober 2002 CuP WS 2002/2003 13 An Beispielen wurde das Überladen von Konstruktoren (Skriptum Kapitel 5.3) gezeigt, ebenso die Wirkungsweise von private int hoehe; in der Klasse Turm. 28. Oktober 2002 CuP WS 2002/2003 14 Rezept zum Einlesen aus einer Datei (Methode lies() aus der selbstgeschneiderten Klasse FileLesen) /* Dieses Programm liest fünf Zeilen aus der Datei dat.txt. Dabei wird die i-te Zeile dem Element a[i] des Feldes a von Strings zugeordnet . FileLesen.lies() soll Ihnen die Arbeit erleichtern. */ public class ArrayLesen{ public static void main(String[] args){ String[ ] a = new String[5]; FileLesen.lies(a, "dat.txt"); for(int i = 0; i < a.length; i++) { System.out.println( a[ i ] ); } } } 28. Oktober 2002 CuP WS 2002/2003 15 Arrays - Einleseprogramm (Nur um Ihre Neugier zufrieden zu stellen, wird nicht geprüft.) import java.io.*; public class FileLesen{ public static void lies(String[ ] a, String fileName){ String line; int i = 0; int n = a.length; 28. Oktober 2002 CuP WS 2002/2003 16 Arrays - Einleseprogramm Fortsetzung try{ BufferedReader liestFile; liestFile = new BufferedReader(new FileReader(fileName)); while ((line = liestFile.readLine( )) != null && i < n){ a[ i ] = line; i++; } liestFile.close(); } catch(IOException e){ System.out.println("Einlesefehler"); } } 28. Oktober 2002 CuP WS 2002/2003 17 Arrays - Einlesen aus einer Datei Fortsetzung des Beispiels Inhalt von dat.txt: 23 44 55 Ausgabe des Programms: 23 44 55 null null 28. Oktober 2002 CuP WS 2002/2003 18