Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Katharina Waltz Geändert vor über 5 Jahren
1
Raphael Fischer fischrap@inf.ethz.ch 15.03.2014
Informatik II - Übung 03 Raphael Fischer
2
Besprechung Übungsblatt 2
Raphael Fischer
3
U2.A1 S R H P V F A N O Q J K G Können Sie aus den obigen
Linksklammerdarstellungen den dazugehörigen Baum eindeutig rekonstruieren? S(R(H(K)),P(A(N,O),Q,T),V(J,F(G))) Ja, falls Position der Knoten unwichtig (linker oder rechter Nachfolger?) Nein, da Position der Knoten in Binary tree nicht eindeutig bestimmbar bei einzelnem Kind (linker oder rechter Nachfolger?) S R H P V F A N O Q J K G Raphael Fischer
4
U2.A2 – Coding style: Effizienz
Objektinstanzierung ist teuer! void initialize() { for (int i=0; i<a.length; i++) { Random r = new Random(); a[i] = r.nextInt(1000); } void initialize() { Random r = new Random(); for (int i=0; i<a.length; i++) { a[i] = r.nextInt(1000); } Raphael Fischer
5
Aufgabe 2c Raphael Fischer
6
[ 5 1 9 2 ] [ 9 1 5 2 ] [ 9 5 1 2 ] [ 9 5 2 1 ] recursiveSort(4)
Kein swap mehr noetig... recursiveSort(3) 2 <- findLargest(2,3) Swap recursiveSort(2) 5 <- findLargest(1,3) Swap recursiveSort(1) 9 <- findLargest(0,3) Swap recursiveSort(0) Ist sortiert! Animation von Simon Mayer Liste absteigend sortiert! Raphael Fischer
7
U2.A3 Wurzel an Index 0 Direkte Nachfolger von i an (2i + 1) und (2i + 2) int leftChild( node ){ return 2 * node + 1; } int rightChild( node ){ return 2 * node + 2; int father( node ){ return (node – 1) / 2; (father(0) = -1 / 2 = 0) Raphael Fischer
8
U2.A3 b Prüfen des übergebenen Arrays:
Teste: Jedes Element braucht einen Vater ("The root is its own father.”) Was passiert mit leeren Knoten? (Brauchen keinen Vater) private static void checkTree(char[] array) { if(array.length == 0) throw new IllegalArgumentException("Empty array is invalid tree!"); for(int i = 1; i < array.length; i++) if(array[father(i)] == ' ' && array[i] != ' ') throw new IllegalArgumentException("Node " + array[i] + " has no father"); } Raphael Fischer
9
Überladung (gleicher Funktions- name, andere Argumente)
U2.A3 c Überladung (gleicher Funktions- name, andere Argumente) public String toString() { return toString(0, ""); } private String toString(int node, String intendation) if(node >= tree.length || tree[node] == ' ') return ""; return intendation + tree[node] + "\n" + toString(leftChild(node), intendation + " ") + toString(rightChild(node), intendation + " "); Raphael Fischer
10
Ausblick: Übungsblatt 3
Raphael Fischer
11
Schleifeninvarianten 🙄
Mathematischer Ausdruck, der immer am Anfang (oder am Ende) der Schleife korrekt ist. Beispiel: int add(int a, int b) { int i = b; int e = a; while(i != 0){ e++; i--; } return e; e+b = a+b b+i = a+b e+i = a+b a+i = a+b i = 0 Raphael Fischer
12
Schleifeninvarianten 🙄
Leider kein Patentrezept. -> Code verstehen 1c) Trickaufgabe. -> Wichtiges Detail Raphael Fischer
13
U3.A2: String und StringBuffer
Klasse String (immutable) Operationen können gut optimiert werden Aber: Modifikationen nur durch Kopie! Klasse StringBuffer (mutable) Veränderbar ohne Kopie Aber: Gewisse Operationen sind teuer! Demo: Immutable und Mutable Strings Raphael Fischer
14
U3.A2 – String vs. StringBuffer
Speicher "hello" " world" String myString = "hello"; myString = myString + " world"; "hello world" String-Konkatenation in Java StringBuffer myStringBuffer = "hello"; myStringBuffer.append(" world"); "hello" "hello world" " world" Methode von StringBuffer Raphael Fischer
15
U3.A2 – String vs. StringBuffer
Speicher "hello" " world" "hello world" " how" Garbage Collector "hello world how" String myString = "hello"; myString = myString+" world"; myString = myString+" how"; myString = myString+" are"; myString = myString+" you"; myString = myString+" today"; " are" "hello world how are" " you" "hello world how are you" Garbage Collector " today" "hello world how are you today" Animation von Beat Saurenmann Raphael Fischer
16
U3.A2 Fehler im Code: Ändere import von Main.java:
import u3a1.util.RandomString; import u3a2.util.RandomString; Raphael Fischer
17
Syntaxdiagramme Was stellt das dar?
Wie ändern, so dass Pinoccio mit bel. Nasenlänge darstellbar ist? Z.B. :--) oder ;------( oder ;) oder : ) Raphael Fischer
18
Syntaxdiagramme Verzweigung: if() {…} else if (…) Oder if(… || …) {…}
Pfeil zurück: Irgendeinen loop Raphael Fischer
19
U3.A3 – Syntaxchecker für Bäume
Implementierung eines Syntaxcheckers für Bäume Zuerst: Erweiterung der Baumsyntax auf leere Teilbäume Syntaxchecker: Je eigene Methode für Baum, Nachfolger und Knoten Lösungsansatz: public static int f(String str, int offset){...} Gebt jeweils den neuen Offset an die übergeordnete Funktion zurück. Überlegt euch, wie gross der Offset am Schluss sein muss und was passiert ist, falls er nicht genau diese Grösse hat. Hinweis: Lösung von 3a) muss mit eingebaut werden Mögliche Probleme und dazugehörige Lösungsansätze/Erklärungen: StringIndexOutOfBoundsException – ihr versucht auf den character n des Strings zuzugreifen, der Array ist aber weniger lang als n Informatik II - Übung 02
20
…viel Spass! Informatik II - Übung 02
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.