240 likes | 343 Views
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
E N D
CuP - JavaNeunte VorlesungEntspricht 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 CuP WS 2002/2003
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]; CuP WS 2002/2003
Zweidimensionale Felder - Wertezuweisung verkäufe[0][5] = 4; Die Deklaration und Initialisierung ist auch so möglich: int[ ][ ] verkäufe = { {3, 15, 6, 0, 1, 4}, {2, 1, 4, 1, 3, 0}, {0, 0, 2, 0, 5, 2}, }; CuP WS 2002/2003
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); } } CuP WS 2002/2003
Zweidimensionale Felder - „length“Ausgabe CuP WS 2002/2003
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], CuP WS 2002/2003
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. CuP WS 2002/2003
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? CuP WS 2002/2003
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 ]; } } CuP WS 2002/2003
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 CuP WS 2002/2003
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; } } CuP WS 2002/2003
„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])) { CuP WS 2002/2003
„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]); CuP WS 2002/2003
„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."); • } • } } } CuP WS 2002/2003
Erweiterungen von KlassenDie 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!"); • } • } CuP WS 2002/2003
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? CuP WS 2002/2003
Wie ist das mit Hunden? • public class Hund extends Tier{ • public void gibLaut(){ • System.out.println ("Wau wau!"); • } • } CuP WS 2002/2003
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“? CuP WS 2002/2003
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!"); • } • } CuP WS 2002/2003
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!"); • } • } CuP WS 2002/2003
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. "); • } } CuP WS 2002/2003
Diese Klasse hat folgende Ausgabe: • Keine Antwort! • Wau wau! • Miau! • Kleopatra hat 4 Beine. • Kra kra! • Die Kraehe hat 2 Beine und 2 Fluegel. CuP WS 2002/2003
Welche Beziehungen gibt es zwischen folgenden Dateien? • Tier.java Kraehe.java • Tier.class Krahe.class • TesteTier.java TesteTiere.java • TesteTier.class TesteTiere.class • Hund.java • Hund.class • Katze.class • TesteHund.java • TesteHund.class CuP WS 2002/2003