Informatik II (D-ITET)
Übungsstunde 5
simon.mayer@inf.ethz.ch
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
simon.mayer@inf.ethz.ch
Distributed Systems Group, ETH Zürich