Informatik II

Werbung
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
Herunterladen