Informatik II. /* c) Baumstruktur in einen String schreiben und zurueckgeben */ public String tostring() {



Ähnliche Dokumente
Objektorientierte Programmierung

Einführung in die Programmierung

Java: Vererbung. Teil 3: super()

Objektorientierte Programmierung

Studentische Lösung zum Übungsblatt Nr. 7

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Programmierkurs Java

Javakurs zu Informatik I. Henning Heitkötter

Große Übung Praktische Informatik 1

Objektorientierte Programmierung

Programmieren in Java

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Algorithmen und Datenstrukturen

Java Einführung Collections

Übung Programmierung WS 2007/08 - Blatt 5

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Test-Driven Design: Ein einfaches Beispiel

Musterlösungen zur Klausur Informatik 3

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Typumwandlungen bei Referenztypen

Speicherstrukturen. Aufgabe 1-1: Fragen zu FAT (File Allocation Table) Aufgabe 1-2: Datensätze variabler Länge. Kind.java:

Modellierung und Programmierung 1

Remote Method Invocation

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Programmiervorkurs WS 2012/2013. Schleifen und Methoden

Einführung in die Java- Programmierung

Binärbäume. Prof. Dr. E. Ehses,

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Applet Firewall und Freigabe der Objekte

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

WPF Steuerelemente Listbox, ComboBox, ListView,

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

5. Tutorium zu Programmieren

Einführung in die Java- Programmierung

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einführung in die Programmierung für Wirtschaftsinformatik

Software Engineering Interaktionsdiagramme

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Beispiel: DB-Mock (1/7)

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Historical Viewer. zu ETC5000 Benutzerhandbuch 312/15

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Programmieren in Java

Übungen Programmieren 1 Felix Rohrer. Übungen

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Kapiteltests zum Leitprogramm Binäre Suchbäume

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 16. Juli 2005 Dr. Alfons Huhn, Timotheus Preisinger

368 4 Algorithmen und Datenstrukturen

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

Software Engineering Klassendiagramme Einführung

Visual Basic Express erstes Projekt anlegen

Einführung in Javadoc

Neue Zugangsdaten für sg-online erstellen

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Dokumentation des Projektes Tic Tac Toe

Software Engineering Klassendiagramme Assoziationen

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

Folge 18 - Vererbung

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Grundlagen von Python

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

1 topologisches Sortieren

3 Objektorientierte Konzepte in Java

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Artikel Schnittstelle über CSV

Gebundene Typparameter

Erwin Grüner

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Anleitung für das Content Management System

1. Sei der String s = new String( xyzzy ) gegeben. Welcher Aufruf verändert s?

Aufklappelemente anlegen

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Suchen und Sortieren

Technische Dokumentation SilentStatistikTool

Delegatesund Ereignisse

Übungsblatt 3: Algorithmen in Java & Grammatiken

Praktische Übung 'JUnit-Test'

OP-LOG

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Breiten- und Tiefensuche in Graphen

Themen. Web Service - Clients. Kommunikation zw. Web Services

am Beispiel von JUnit

SEP 114. Design by Contract

Arrays Fortgeschrittene Verwendung

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Transkript:

Universität Augsburg, Institut für Informatik Sommersemester 2006 Prof. Dr. Werner Kießling 08. Juni. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5 Aufgabe 1: Cloneable Tree.java Informatik II /* Klasse Tree, generisch implementiert Cloneable */ public class Tree<T> implements Cloneable // Knoten private T node; // linker Teilbaum private Tree<T> left; // rechter Teilbaum private Tree<T> right; /* Konstruktor, an den das Knoten-Objekt uebergeben wird. Der Knoten ist dann das Objekt, left und right werden auf null gesetzt */ public Tree(T node) this.node = node; /* a) Konstruktor, bei dem auch der linke und der rechte Teilbaum initialisiert werden */ public Tree(T node, Tree<T> left, Tree<T> right) this.node = node; this.left = left; this.right = right; // b) // Erstellen einer tiefen Kopie protected Tree<T> clone() // zuerst neuen Baum anlegen Tree<T> t = new Tree<T>(node); // Rekursiv clonen if (left!= null) t.left = left.clone(); if (right!= null) t.right = right.clone(); return t; /* c) Baumstruktur in einen String schreiben und zurueckgeben */ public String tostring() if (node!= null) return node.tostring() + " " + left + " " + right; /* null zurueckgeben, falls der Baum keine Elemente hat */ return null; 1

// d) // main-methode public static void main(string args[]) // Baum aus Abb. 1 anlegen Tree<Integer> tree = new Tree<Integer> (1, new Tree<Integer>(2), new Tree<Integer>(3)); // tiefe Kopie erstellen Tree<Integer> tree_clone = tree.clone(); // Ausgabe auf der Kommandozeile System.out.println("tree: " + tree.tostring()); System.out.println("tree_clone: " + tree_clone.tostring()); Aufgabe 2: Exceptions MatrixException.java package blatt03.exception; // MatrixException erweitert Exception public class MatrixException extends Exception // leerer Konstruktor public MatrixException() super(); // Konstruktor mit String public MatrixException(String message) // Aufruf des Konstruktors // der Oberklasse super(message); Matrix.java... // 2.c) // Konstruktor fuer das Matrix-Array public Matrix(int[][] m) throws MatrixException // m auf null ueberpruefen // und ggf. MatrixException werfen if (m == null) throw new MatrixException("Matrix darf nicht NULL sein"); /* der Konstruktor Matrix(int rows, int columns) kann nicht aufgerufen * werden, da der Aufruf an erster Stelle stehen muesste Deswegen alles * nochmal neu initialisieren */ this.rows = m.length; this.columns = m[0].length; this.m = new int[rows][columns]; // fuellen von m for (int i = 0; i < rows; i++) 2

// durchlaufe alle Zeilen for (int j = 0; j < columns; j++) // durchlaufe alle Spalten this.m[i][j] = m[i][j]; // setze Wert... // 2.b) // Matrixmultiplikation public Matrix mult(matrix B) throws MatrixException // Ueberpruefen, ob die Matrizen kompatibel sind if (this.columns!= B.rows) // System.out.println("Die Dimensionen der Matrizen sind nicht // kompatibel"); // return null; throw new MatrixException( "Die Dimensionen der Matrizen sind inkompatibel!"); // neues Matrix-Objekt erstellen Matrix C = new Matrix(this.rows, B.columns); // Berechung des Elementes c_ij in der Matrix C for (int i = 0; i < rows; i++) // durchlaufe alle Zeilen for (int j = 0; j < B.columns; j++) // durchlaufe alle Spalten for (int k = 0; k < columns; k++) // bilden der Summe C.m[i][j] += m[i][k] * B.m[k][j]; // Matrix C zurueckliefern return C; MatrixTest.java package blatt03.test; // importieren der Matrix-Klasse import blatt03.math.matrix; import blatt03.exception.*; public class MatrixTest // main-methode public static void main(string[] args) try // Matrizen erstellen int[][] matrixa = 1, 2, 3, 4, 5, 6 ; int[][] matrixb = 1, 2, 3, 4 ; // Erzeugen der Matrix-Objekte Matrix A = new Matrix(matrixA); Matrix B = new Matrix(matrixB); // Ausgabe der Matrizen mit Hilfe von // System.out.println(...) System.out.println("A = \n" + A.toString()); 3

System.out.println("B = \n" + B.toString()); // 2.d) // Matrixmultiplikation und Ausgabe der Ergebnismatrix Matrix AxB = A.mult(B); System.out.println("A x B = \n" + AxB.toString()); /* an dieser Stelle wird das Programm aufgrund der Exception abgefangen. Der nachfolgende Code wird nicht mehr ausgefuehrt */ /* 2.c) Wenn das Array null ist, kann kein Matrix-Objekt angelegt werden Exception wird geworfen */ int[][] matrixc = null; new Matrix(matrixC); // abfangen von MatrixException catch (MatrixException e) System.err.println(e.getMessage()); Aufgabe 3: XML-Parser XMLParser.java import java.util.*; // Klasse XMLParser public class XMLParser // Das XML-Dokument Tontraeger.txt private final static String xml = "siehe tontraeger.txt"; // a) + b) // Die Methode parse zum parsen des Dokumentes // xmltag enthaelt das XML-Tag // xmldoc ist das XML-Dokument in einem String // Der Vector soll nur String aufnehmen koennen public Vector<String> parse(string xmltag, String xmldoc) // endtag = Schliessenden Tag // begintag = Oeffnendes Tag // In inhalt wird der Inhalt des Tags gespeichert String endtag, begintag, inhalt = ""; int index = 0, startindex = 0, endindex = 0; // generische typsicherer Vector, // kann nur String enthalten Vector<String> v = new Vector<String>(); // erstmal alles in Kleinbuchstaben wandeln xmltag = xmltag.tolowercase(); xmldoc = xmldoc.tolowercase(); // endtag bestimmen (am Anfang </ anhaengen ) 4

// subtring(1) nimmt xmltag ab Position 1! endtag = "</"+xmltag.substring(1); // das > vom Tag wird abgeschnitten, um spaeter zu wissen wo // der Inhalt vom Tag anfaengt (siehe *) begintag = xmltag.substring(0,xmltag.length()-1); // hier laeuft das eigentliche parsen // wenn nichts mehr gefunden wird bricht die Schleife ab while(true) // Vorkommen von begintag ab Position index bestimmen index = xmldoc.indexof(begintag,index); // Nichts mehr gefunden -> Abbruch (aus der Schleife raus) if (index == -1) break; // der Start vom Inhalt ist das erste Auftreten von > nach dem // begintag + 1! *! startindex = xmldoc.indexof(">",index)+1; endindex = xmldoc.indexof(endtag,index+1); // index auf das Ende vom aktuellen Tag setzen, um spaeter nicht // wieder dasselbe zu lesen index = endindex; // den Inhalt aus dem XMLDOC per substring rausholen inhalt = xmldoc.substring(startindex,endindex); // zum Vektor hinzufuegen // trim entfernt Leerzeichen am Anfang und Ende v.add(inhalt.trim()); return v; // main-methode public static void main(string[] args) XMLParser xp = new XMLParser(); int i = 0; // Hashtable erzeugen Hashtable<Integer, String> h = new Hashtable<Integer, String>(); // <Interpret> als Tag Vector<String> x = xp.parse("<interpret>",xml); // alle Strings von dem Vector durchlaufen for(string str2 : x) String str1, str = ""; // hier wird der String nach einem Leerzeichen abgehackt // Alternativ: String [] sta = str2.split(" "); StringTokenizer st = new StringTokenizer(str2," ",false); 5

// alle einzelnen Woerter durchlaufen und den Anfangsbuchstaben // gross schreiben und den Rest klein schreiben while (st.hasmoretokens()) str1 = st.nexttoken(); str = str + " " +str1.substring(0,1).touppercase() + str1.substring(1).tolowercase(); // Leerzeichen am Anfang und Ende abschneiden str = str.trim(); // wenn noch nicht in Hashtable enthalten, dazufuegen if (!h.contains(str)) h.put(new Integer(i),str); i++; // Enumeration zum druchlaufen Enumeration e = h.keys(); System.out.println("\n\nKeys: "); // die Keys (Zahlen von 1 -.. durchlaufen // solange es noch Elemente gibt while(e.hasmoreelements()) System.out.println(e.nextElement()); // die Elemente Inhalte durchlaufen e = h.elements(); System.out.println("\n\nInterpreten (Elemente): "); while(e.hasmoreelements()) System.out.println(e.nextElement()); /* Alternative (ohne Enumeration) for (Integer ikey : h.keyset()) System.out.println(iKey.toString()); for (String strinhalt : h.values()) System.out.println(strInhalt); */ 6