CuP WS 2000/2001

Werbung
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
Herunterladen