CuP WS 2000/2001

Werbung
CuP - Java
Neunte Vorlesung
Entspricht Kapitel 4.2 und 5 des Skriptums
Montag, 4. November 2002
Zweidimensionale Felder
Beispiele:
Schachbrett, Fahrplan, Matrix
0
1
2
3
4
5
0
3
15
6
0
1
4
1
2
1
4
1
3
0
2
0
0
2
0
5
2
3 Autohäuser, verkaufte Autos pro Werktag
4. November 2002
CuP WS 2002/2003
2
Zweidimensionale Felder - Deklaration
int[ ][ ] verkäufe = new int [3][6];
double[ ][ ] temperaturen = new double[10][7];
String texte[ ][ ] = new String[5][8];
oder:
int[ ][ ] verkäufe;
verkäufe = new int [3][6];
4. November 2002
CuP WS 2002/2003
3
Zweidimensionale Felder - Wertezuweisung
verkäufe[0][5] = 4;
Die Deklaration und Initialisierung ist auch so möglich:
int[ ][ ] verkäufe = {
{3, 15, 6,
{2, 1, 4,
{0, 0, 2,
};
4. November 2002
0,
1,
0,
1,
3,
5,
CuP WS 2002/2003
4},
0},
2},
4
Zweidimensionale Felder - „length“
public class FeldTest{
public static void main(String args[ ]){
int[ ][ ] verkäufe = {
{3, 15, 6, 0, 1, 4},
{2, 1, 4, 1, 3, 0},
{0, 0, 2, 0, 5, 2},
};
System.out.println("verkaeufe.length = " +
verkäufe.length);
System.out.println("verkaeufe[0].length = " +
verkäufe[0].length);
}
}
4. November 2002
CuP WS 2002/2003
5
Zweidimensionale Felder - „length“
Ausgabe
4. November 2002
CuP WS 2002/2003
6
Deutung
Das Feld
int[ ][ ] verkäufe =
{ {3,15,6,0,1,4}, {2,1,4,1,3,0}, {0,0,2,0,5,2}, };
ist eigentlich eine Feld der Länge drei, bestehend aus drei
Feldern der Länge sechs! Diese Felder sind
verkäufe[0], verkäufe[1], und verkäufe[2].
Das Feld verkäufe[0] etwa besteht aus:
verkäufe[0][0], verkäufe[0][1], verkäufe[0][2],
verkäufe[0][3], verkäufe[0][4], verkäufe[0][5],
4. November 2002
CuP WS 2002/2003
7
Summenbildung - Zeilen
Wir gehen wieder von dem Feld verkäufe aus:
int[ ][ ] verkäufe =
{ {3,15,6,0,1,4}, {2,1,4,1,3,0}, {0,0,2,0,5,2}, };
Die Summe der Verkäufe des zweiten Autohauses wird berechnet
durch:
int sum = 0;
for ( int j = 0; j < verkäufe[1].length; j++ ) {
sum = sum + verkäufe[1] [ j ] ;
}
Nach Ausführung dieser Anweisungen hat sum
den Wert 11.
4. November 2002
CuP WS 2002/2003
8
Summenbildung - Spalten
Die Summe der Verkäufe am dritten Tag ist:
int s = 0;
for ( int i = 0; i < verkäufe.length; i++ ) {
s = s + verkäufe[ i ] [ 2 ] ;
}
Nach Ausführung dieser Anweisungen hat sum
den Wert 12.
Wodurch bekommt man die Summe für den fünften Tag?
4. November 2002
CuP WS 2002/2003
9
Gesamtsumme
int s = 0;
for ( int i = 0; i < verkäufe.length; i++){
for( int j = 0; j < verkäufe[0].length; j++ ){
s = s + verkäufe[ i ] [ j ];
}
}
4. November 2002
CuP WS 2002/2003
10
Beispiel: System zweier linearer Gleichungen
Gegeben sei das System
a[0][0]*x + a[0][1]*y = a[0][2]
a[1][0]*x + a[1][1]*y = a[1][2]
Die Determinante des Systems ist
det = a[0][0] * a[1][1] - a[0][1] * a[1][0]
Die Lösungen berechnen sich wie folgt:
x = (a[0][2] * a[1][1] - a[0][1] * a[1][2]) / det
y = (a[0][0] * a[1][2] - a[0][2] * a[1][0]) / det
4. November 2002
CuP WS 2002/2003
11
Die Methode loese()
public class LinSystem{
static double x,y;
public static boolean loese(double[][] a){
double eps = 1.0E-6; //eps = 0.000 001
double det = a[0][0] * a[1][1] - a[0][1] * a[1][0];
if (Math.abs(det) > eps) {
x = (a[0][2] * a[1][1] - a[0][1] * a[1][2]) / det;
y = (a[0][0] * a[1][2] - a[0][2] * a[1][0]) / det;
return true;
} else
return false;
}}
4. November 2002
CuP WS 2002/2003
12
„Treiber“: Liest Daten aus einer Datei und löst das
System (1/3):
class Treiber {
public static void main(String [] args) {
String[] a = new String[6];
double[][] dArr = new double[2][3];
boolean ok = false;
FileLesen.lies(a, "werte.txt");
if((null != a[0]) && (null != a[1]) && (null != a[2]) && (null !=
a[3]) && (null != a[4]) && (null != a[5])) {
4. November 2002
CuP WS 2002/2003
13
„Treiber“: Liest Daten aus einer Datei und
löst das System (2/3):
dArr[0][0] = Double.parseDouble(a[0]);
dArr[0][1] = Double.parseDouble(a[1]);
dArr[0][2] = Double.parseDouble(a[2]);
dArr[1][0] = Double.parseDouble(a[3]);
dArr[1][1] = Double.parseDouble(a[4]);
dArr[1][2] = Double.parseDouble(a[5]);
4. November 2002
CuP WS 2002/2003
14
„Treiber“: Liest Daten aus einer Datei und
löst das System (3/3):
ok = LinSystem.loese(dArr);
if(ok){
System.out.println("x = " + LinSystem.x + ".");
System.out.println("y = " + LinSystem.y + ".");
}
else {
System.out.println("System schlecht
konditioniert oder singulaer.");
}
}}}
4. November 2002
CuP WS 2002/2003
15
Erweiterungen von Klassen
Die Klasse Tier
/* Beispiel einer Klasse mit einer Methode und einem
Attribut*/
public class Tier{
int beineanzahl = 4;
public void gibLaut(){
System.out.println("Keine Antwort!");
}
}
4. November 2002
CuP WS 2002/2003
16
Test der Klasse Tier
public class TesteTier{
public static void main(String args[]){
Tier liebesTier = new Tier();
liebesTier.gibLaut();
System.out.println("Dieses Tier hat " +
liebesTier.beineanzahl + " Beine.");
}
}
Ausgabe?
4. November 2002
CuP WS 2002/2003
17
Wie ist das mit Hunden?
public class Hund extends Tier{
public void gibLaut(){
System.out.println ("Wau wau!");
}
}
4. November 2002
CuP WS 2002/2003
18
Test der Klasse Hund
public class TesteHund{
public static void main(String args[]){
Hund waldi = new Hund();
waldi.gibLaut();
System.out.println("Dieses Tier hat " +
waldi.beineanzahl + " Beine.");
}
}
Ausgabe? Hat „waldi“ überhaupt eine „beineanzahl“?
4. November 2002
CuP WS 2002/2003
19
Schlussfolgerung
Die Klasse Hund erbt ihre Beineanzahl von der Klasse
Tier. Die Methode gibLaut() wird auch geerbt, aber wir haben
sie durch eine neue Version überschrieben.
Wir definieren noch eine Klasse Katze und eine Klasse Kraehe:
public class Katze extends Tier{
public void gibLaut(){
System.out.println("Miau!");
}
}
4. November 2002
CuP WS 2002/2003
20
Die Klasse Kraehe
/* Bei dieser Klasse setzen wir die Zahl der Beine neu!
Sie wird einfach überschrieben, wie man sagt.
Außerdem führen wir eine Flügelanzahl ein. (Wir
„erweitern“ die Klasse Tier!)
*/
public class Kraehe extends Tier{
int beineanzahl = 2;
int fluegelanzahl = 2;
public void gibLaut(){
System.out.println("Kra kra!");
}
}
4. November 2002
CuP WS 2002/2003
21
public class TesteTiere {
public static void main(String args[ ]){
Tier untier = new Tier();
Hund hasso = new Hund();
Katze kleopatra = new Katze();
Kraehe rabenvieh = new Kraehe();
untier.gibLaut();
hasso.gibLaut();
kleopatra.gibLaut();
System.out.println("Kleopatra hat " +
kleopatra.beineanzahl + " Beine.");
rabenvieh.gibLaut();
System.out.println("Die Kraehe hat " +
rabenvieh.beineanzahl
+ " Beine und " +
rabenvieh.fluegelanzahl + " Fluegel. ");
}}
4. November 2002
CuP WS 2002/2003
22
Diese Klasse hat folgende Ausgabe:
Keine Antwort!
Wau wau!
Miau!
Kleopatra hat 4 Beine.
Kra kra!
Die Kraehe hat 2 Beine und 2 Fluegel.
4. November 2002
CuP WS 2002/2003
23
Welche Beziehungen gibt es zwischen
folgenden Dateien?
Tier.java
Tier.class
TesteTier.java
TesteTier.class
Hund.java
Hund.class
Katze.class
TesteHund.java
TesteHund.class
4. November 2002
Kraehe.java
Krahe.class
TesteTiere.java
TesteTiere.class
CuP WS 2002/2003
24
Herunterladen