Informatik II (D-ITET) Übungsstunde 5 [email protected] Distributed Systems Group, ETH Zürich Ablauf Nachbesprechung Übungen 3 und 4 Besprechung der Vorlesung Übungsbezogene Themen: Referenzen, Listen Zeit zum Programmieren / für Demos Informatik II Nachbesprechung Übung 3 1. Objekte, Strings, Referenzen Gute Lösungen, aber wir gehn’s zur Sicherheit mal durch... 2. Syntaxdiagramm Alles super. 3. Syntaxchecker Sehr gute Lösungen! Nach den Korrekturen müsste alles laufen... Informatik II 3 Aufgabe 1: Objekte, Strings, Referenzen Kleine «Falle»: http://docs.oracle.com/javase/specs/jls/se5.0/html/j3TOC.html Ansonsten: Aufpassen bei Unterschieden zwischen Strings und Stringbuffer! Strings können sich nicht verändern!! (Fehler in 3 Gruppen) Stringbuffer schon! (Hat auch keiner falsch gemacht...) Informatik II 4 Nachbesprechung Übung 4 Stack Ackermann – explodierende Rekursion... :-) Java Bytecode Informatik II 5 Ablauf Nachbesprechung Übungen 3 und 4 Besprechung der Vorlesung Übungsbezogene Themen: Referenzen, Listen Zeit zum Programmieren / für Demos Informatik II 6 Worum ging es? Gehen wir mal über zur OO... :-) Informatik II 7 Call by Value vs. Call by Reference und Java Call by Reference: //C++ Call by Value: Die Referenz auf die Daten wird übergeben void swap(&a, &b); Die Daten werden kopiert und übergeben //C++ void swap(a, b); Informatik II 8 Call by Value vs. Call by Reference und Java Java kopiert Referenzen und übergibt diese Kopien Quasi «Call by Value mit den Referenzen» // Situation in main() Point myPoint = new Point(3,4); // Aufruf von doSomething(...) doSomething(Point methodPoint) myPoint myPoint int x; int y; int x; int y; methodPoint Wir sprechen hier nicht über primitive Datentypen wie int, short,...! Informatik II 9 Call by Value vs. Call by Reference und Java Was heisst das für uns? Ist das Modifizieren von übergebenen Werten möglich? Wie / Warum nicht? Ist das Vertauschen von übergebenen Werten möglich? Wie / Warum nicht? Informatik II 10 void swap (Point p1, Point p2) { ... } Modifizieren ist möglich, Vertauschen aber nicht! swap(myPoint1, myPoint2) main(...) myPoint1 myPoint2 myPoint1 Nach swap(...) myPoint1 int x1; int y1; int x1; int y1; int x1; int y1; p1 p1 int x2; int y2; myPoint2 myPoint2 int x2; int y2; p2 int x2; int y2; p2 Gute Referenz:http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html Informatik II 11 Call by Value vs. Call by Reference und Java Demo... Informatik II 12 Ablauf Nachbesprechung Übungen 3 und 4 Besprechung der Vorlesung Übungsbezogene Themen: Referenzen, Listen Zeit zum Programmieren / für Demos Informatik II 13 Übung 5 1. Verkettete Listen – Read Only Muss per Rekursion gelöst werden – keine Schleifen! 2. Listen modifizieren Auch alles rekursiv machen! 3. Sortierte Listen Einfügen eines neuen Wertes in eine sortierte Liste Sortieren durch (a) :-) Auch alles rekursiv! 4. Dynamischer Stack mit verketteten Listen Informatik II 14 Übung 5 – Aufgabe 1 Leere Listen und null :-) Lest das JavaDoc! Sehen wir uns mal toString() an... Nur read-only Operationen! Was heisst «verändern»? Warum «verändert» «sublist()» die Liste nicht?? Warum «verändert» «add()» die Liste nicht?? Informatik II 15 Übung 5 – Aufgabe 2 Es werden keine neuen Listen erzeugt, sondern die übergebenen Listen verändert Warum «verändert» append() die Liste?? add() hat sie ja nicht verändert! Verwendet die Klasse aus Aufgabe 1! Wisst ihr, wie? Man könnte bei der Gelegenheit gleich mal bzgl. Laufzeitkomplexität mit der letzten Liste (mit Array und grow()) vergleichen... :-) Informatik II 16 Übung 5 – Aufgabe 2 Es werden keine neuen Listen erzeugt, sondern die übergebenen Listen verändert Warum verändert append() die Liste?? add() hat sie ja nicht verändert! Preisfrage: Warum haben append, concat, insertAt die signatur public static void x(...) aber remove die Signatur public static List remove(...) Hinweis: Was passiert, wenn das erste Element der übergebenen Liste gelöscht werden soll? Informatik II 17 Übung 5 – Aufgabe 3 Sortieren von Listen sort(...) mit insertSorted(...) public static List insertSorted(List list, int value) public static List sort(List list) Informatik II 18 Übung 5 – Aufgabe 4 Dynamisch wachsender Stack mit verketteten Listen Kennt ihr auch schon von C++... Wo wird beim push() das neue Element angehängt? Am Anfang der Liste? Am Ende der Liste? Was ist «besser»? Warum? Sucht’s euch aus... ihr habt ja add() aus A1 und append() aus A2 Informatik II 19 Ablauf Nachbesprechung Übungen 3 und 4 Besprechung der Vorlesung Übungsbezogene Themen: Referenzen, Listen Zeit zum Programmieren / für Demos Informatik II 20 Kurzer Blick auf JUnit und den Debugger Informatik II 21 Informatik II (D-ITET) Übungsstunde 5 [email protected] Distributed Systems Group, ETH Zürich