252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung...
Transcript of 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung...
![Page 1: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/1.jpg)
252-0027Einführung in die Programmierung
10.0 Generische ProgrammierungThomas R. Gross
Department InformatikETH ZürichCopyright (c) Pearson 2013 and Thomas Gross 2016, 2019All rights reserved.
![Page 2: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/2.jpg)
Übersicht
§ 10.1 Einleitung
§ 10.2 ArrayList<T>§ ArrayList<String>§ Wrapper Typen
§ 10.3 Vergleichen von Objekten
§ 10.4 Mengen
§ 10.5 Abbildungen
§ 10.6 Iteratoren 2
![Page 3: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/3.jpg)
Bemerkungen zu Vorlesung und Prüfung
3
![Page 4: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/4.jpg)
4
Ende Oktober
![Page 5: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/5.jpg)
5
November
![Page 6: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/6.jpg)
6
Ende Oktober
![Page 7: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/7.jpg)
7
![Page 8: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/8.jpg)
§ ein bisschen mehr Eclipse in der Vorlesung
§ Tempo dür5e etwas schneller sein.
§ Besser machen
§ Für mich ist es schwierig Ansätze nachzuschlagen, da wir nurdie Vorlesungsfolien haben.§ hAps://www.lst.inf.ethz.ch/educaDon/einfuehrung-in-die-
programmierung-i--252-0027-.html§ hAps://docs.oracle.com/javase/tutorial/tutorialLearningPaths.html
§ Manchmal sind die Beispiele etwas unnöDg, da man währendder Vorlesung nicht wirklich Zeit hat, einen langen Code genauzu studieren.
8
![Page 9: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/9.jpg)
Prüfung§ Was ich weiss:
§ Am 23. 1. 2020§ Türöffnung 9:00 morgens
§ Programmierprüfung (am Computer) und schriftlichePrüfung (auf Papier)§ Programmierprüfung: 3 Stunden§ Schriftlich: 1 Stunde§ Keine Pause zwischen den Blöcken
9
Alle Angaben ohne Gewähr. Änderungen möglich. Die Prüfungsplanstelle und das VLV sind massgebend.
![Page 10: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/10.jpg)
Prüfung
§ Umfang:§ Inhalt der Vorlesung§ Probeprüfung wird noch zur Verfügung gestellt (VIS hat auch einige
alte Prüfungen)§ NEU: 1 Std mehr für Programmierprüfung (als 2018/19) [mehr Zeit,
nicht mehr Arbeit oder mehr Punkte]
§ Mitbringen:§ Legi§ ggf Wörterbuch (E-D, F-D, F-E, I-E, I-D, ….)
§ Ohne Java Notizen! 10
![Page 11: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/11.jpg)
Prüfungsumgebung§ Eclipse (wie in Studentenarbeitsräumen, HG )
§ Liste (nur Englisch verfügbar) § Projekte im workspace
§ Linux (aber brauchen Sie nicht wirklich)
§ (Hoffentlich) offizielle Java 11 Dokumentation [Englisch!]§ Nicht garantiert§ Direkter Zugriff aus Eclipse
§ Üben Sie mit Eclipse§ Viele gute Features
11
![Page 12: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/12.jpg)
Weitere Informationen
§ (Hoffentlich) US Tastaturen verfügbar§ eMail Anfang Januar 2020§ Nicht garantiert und auch nicht wirklich entscheidend
§ Keine Mobiltelefone, Tablets, Smartwatches etc in den Prüfungsräumen (zuhause oder in Rucksack lassen)
§ Prüfung auf Deutsch
§ Antworten auf Englisch akzeptiert
§ Weitere Informationen später, Web Seite beobachten13
![Page 13: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/13.jpg)
Bewertung§ Programmieraufgaben müssen Testsuite behandeln können
§ Wir geben einige Tests vor, andere sollten Sie selbst schreiben
§ Das Programm muss übersetzt und ausgeführt werdenkönnen.
14
![Page 14: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/14.jpg)
Teilpunkte
§ Wieviele Punkte soll eine unvollständige Lösung geben?
§ Sie sollen eine 1'182 m lange Brücke bauen
§ 210 m (18%) der Brücke stürzt ein
§ 82% der Brücke bleibt stehen.
15
![Page 15: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/15.jpg)
Bewertung
§ Programmieraufgaben müssen Testsuite behandeln können§ Wir geben einige Tests (Suite BT) vor, andere sollten Sie selbst
schreiben§ Es gibt weitere Tests für die Bewertung
§ Ähnlich wie bei Bonusaufgaben (je mehr Tests korrektbehandelt werden desto besser)§ Korrektheit – nicht Laufzeit (innerhalb vernüftiger Grenzen)§ Wenn Ihr Programm die Tests in BT ohne Timeout ausführen kann
dann sind Sie auf der sicheren Seite 18
![Page 16: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/16.jpg)
Übersicht
§ 10.1 Einleitung
§ 10.2 ArrayList<T>§ ArrayList<String>§ Wrapper Typen
§ 10.3 Vergleichen von Objekten
§ 10.4 Mengen
§ 10.5 Abbildungen
§ 10.6 Iteratoren 19
![Page 17: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/17.jpg)
Arbeiten mit Set ExemplarenList<String> list = new ArrayList<String>();...Set<String> set1 = new TreeSet<String>(list); Set<String> set2 = new HashSet<String>(list);
§ Oft wissen wir nicht welche Art Set am besten ist§ Daher wollen wir unsere Programme flexibel lassen
§ Verwenden des Interfaces als Typ für Parameter und Attribute/Variableboolean method(Set<String> s)
21
![Page 18: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/18.jpg)
Set Methoden
22
add(value) adds the given value to the setcontains(value) returns true if the given value is found in this setremove(value) removes the given value from the setclear() removes all elements of the setisEmpty() returns true if the set's size is 0toString() returns a string such as "[3, 42, -7, 15]"
![Page 19: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/19.jpg)
Operationen mit Mengen
addAll(collection) adds all elements from the given collection to this setcontainsAll(coll) returns true if this set contains every element from given setequals(set) returns true if given other set contains the same elementsiterator() returns an object used to examine set's contents (später mehr)removeAll(coll) removes all elements in the given collection from this setretainAll(coll) removes elements not found in given collection from this settoArray() returns an array of the elements in this set
addAll retainAll removeAll
23
![Page 20: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/20.jpg)
Mengen und Ordnungsrelationen§ HashSet : Elemente sind in irgendeiner Reihenfolge
gespeichertSet<String> names = new HashSet<String>();names.add("Jake");names.add("Robert");names.add("Marisa");names.add("Kasey");System.out.println(names);// [Kasey, Robert, Jake, Marisa]
24
![Page 21: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/21.jpg)
Mengen und Ordnungsrelationen§ TreeSet : Elemente werden gemäss compareTo
Ordnung gespeichertSet<String> names = new TreeSet<String>();names.add("Jake");names.add("Robert");names.add("Marisa");names.add("Kasey");System.out.println(names);// [Jake, Kasey, Marisa, Robert]
§ LinkedHashSet : in der Reihenfolge des HinzufügensgespeichertSet<String> names = new LinkedHashSet<String>();...// [Jake, Robert, Marisa, Kasey] 25
![Page 22: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/22.jpg)
∀ Elemente der Menge
§ Da die Ordnung der Elemente in der Mengen nicht bekanntist müssen wir einen (stabilen) Weg finden, Operationen mitallen Elemente einer Menge auszuführen.§ Die Operation kann einen Test einschliessen der dann – je nach
Ergebnis – die Operationen genauer definiert§ Wenn element.hasProperty() dann element.moreOps()
§ Idee: Schleife über alle Elemente einer (An)Sammlung§ Menge Spezialfall
26
![Page 23: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/23.jpg)
Die "for each" SchleifeSyntax:for (type name : collection) {
statements;}
type: Typ der Elemente der Collectionname: Variable (nur innerhalb des Loops definiert)
§ Definiert einen Loop über alle Elemente einer Ansammlung(z.B., Set, List) die das Interface Collectionimplementieren oder eines Arrays
27
![Page 24: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/24.jpg)
29
Beispiel
Set<Double> scores = new HashSet<Double>();scores.add(21.0);scores.add(20.0);scores.add(24.0);scores.add(0.0);
//Double ist ein Wrapper Typ!for (Double score : scores) {
System.out.println("The score is " + score);}
Map<String, Double> staff = new HashMap<String, Double>();staff.put("Peter", 1.0);staff.put("Mary", 6.0);
for (String s : staff.keySet()) {System.out.println("Info: " + s +" -- " + staff.get(s));
}
![Page 25: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/25.jpg)
30
Beispiel
Set<Double> scores = new HashSet<Double>();scores.add(21.0);scores.add(20.0);scores.add(24.0);scores.add(0.0);
//Double ist ein Wrapper Typ!for (double score : scores) {
System.out.println("The score is " + score);}
Map<String, Double> staff = new HashMap<String, Double>();staff.put("Peter", 1.0);staff.put("Mary", 6.0);
for (String s : staff.keySet()) {System.out.println("Info: " + s +" -- " + staff.get(s));
}
![Page 26: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/26.jpg)
31
![Page 27: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/27.jpg)
Reihenfolge der Iteration§ HashSet – nicht definiert.
§ LinkedHashSet – wie eingefügt.§ ArrayList – wie eingefügt.
§ LinkedList – wie eingefügt.§ TreeSet – aufsteigend (nach compareTo).
32
![Page 28: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/28.jpg)
10.5 Abbildungen
34
![Page 29: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/29.jpg)
Mengen (Sets)§ Eine Menge ist eine Abbildung (map) der Elemente auf
bool’sche Werte.§ Set: Ist "ETH" in der Menge? (true/false)
Set"ETH" true
false
35
![Page 30: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/30.jpg)
Mengen (Sets) und Abbildungen (Maps)§ Eine Menge ist eine Abbildung (map) der Elemente auf
bool’sche Werte.§ Set: Ist "ETH" in der Menge? (true/false)
§ Map: Was ist die Postleitzahl der "ETH"?
Set"ETH" true
false
Map"ETH" "8092"
36
![Page 31: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/31.jpg)
Abbildungen ("Map")§ Abbildung ("map"): Hält eine Menge Schlüssel (keys) und
eine (An)Sammlung von Werten (values), wobei jederSchlüssel mit einem Wert assoziiert ist. § Auch als "dictionary", "associative array",
"hash" bekannt.
myMap.get("Juliet") returns "Capulet"
37
![Page 32: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/32.jpg)
38
![Page 33: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/33.jpg)
Einsatz von Abbildungen§ Eine Abbildung stellt eine Assoziation zwischen
Schlüssel(key) und Werten her.§ Speichert einen Wert für jeden Key (Schlüssel).
§ Später brauchen wir nur einen Schlüssel angeben und erhalten den entsprechenden Wert zurück:
Dann können wir fragen: Was ist die ETH Telefonnummer?
Mapget("ETH")
"044-632-1111"
Map
// key valueput("ETH", "044-632-1111")
40
![Page 34: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/34.jpg)
Abbildungen§ Wichtigste Operationen:
§ put(key, value): Hinzufügen eines Schlüssels mit einem Wert
§ get(key): Lesen des Wertes der mit dem Schlüssel assoziiert ist.
§ remove(key): Entfernen des Schlüssels (und des mit ihm assoziiertenWertes)
41
![Page 35: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/35.jpg)
Map Implementation§ In Java, Abbildungen ("maps") werden durch das Map
Interface in java.util unterstützt§ Muss importiert werden§ Verschiedene Implementationen
§ Wichtige Klassen die Map implementieren sind HashMap, LinkedHashMap und TreeMap
43
![Page 36: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/36.jpg)
Map Implementation
§ HashMap: Schlüssel sind in einem Array, dem "hash table", gespeichert, in irgendeiner Reihenfolge gespeichertZugriff sehr effizient: O(1)
§ LinkedHashMap: Zugriff schnell O(1), speichert Elementein der Reihenfolge in der sie in die Abbildung hinzugefügtwurden
§ TreeMap: Schlüssel in einem binärem Baum gespeichert; Schlüssel sind sortiert gespeichertZugriff ziemlich effizient: O(log N) 44
![Page 37: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/37.jpg)
§ Eine Abbildung erfordert zwei Typ Parameter: einen für die Schlüssel, einen für die Werte.
// maps from String keys to Integer values
Map<String, Integer> votes =
new HashMap<String, Integer>();
45
![Page 38: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/38.jpg)
46
![Page 39: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/39.jpg)
MapMethoden
put(key, value) adds a mapping from the given key to the given value;if the key already exists, replaces its value with the given one
get(key) returns the value mapped to the given key (null if not found)containsKey(key) returns true if the map contains a mapping for the given keyremove(key) removes any existing mapping for the given keyclear() removes all key/value pairs from the mapsize() returns the number of key/value pairs in the mapisEmpty() returns true if the map's size is 0toString() returns a string such as "{a=90, d=60, c=70}"
48
![Page 40: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/40.jpg)
Konstruktion von AbbildungenMap<KeyType, ValueType> name = new TreeMap<KeyType,
ValueType>();
§ Könnte auch auch spezifische ReferenzvariableTreeMap<KeyType, ValueType> name
deklarieren
§ Wollen vielleicht flexibel bleiben
49
![Page 41: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/41.jpg)
Map Verhalten§ Diese Abbildung (Map) speichert einen Wert (Integer) für
einen Schlüssel (ein String, der "Name")
Map<String, Integer> ages = new TreeMap<String, Integer>();
ages.put("Roland", 19);ages.put("Clara", 2); ages.put("Sarah", 57);
50
Roland
Clara SarahTyp ist String – daher entscheidetcompareTo der Klasse String die Ordnung
![Page 42: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/42.jpg)
51
![Page 43: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/43.jpg)
keySet()
§ Die Methode keySet liefert die Menge (Set) aller "Keys" (Schlüssel) in der Abbildung (Map)§ Kann die Menge aller Keys in einer for each Schleife bearbeiten§ Kann den Wert, der zu einem Key gehört, durch Aufruf von get für
die Map erhalten
§ Für Map<KeyType, ValueType> name heisst das:name.keySet() liefert ein Set<KeyType>
52
![Page 44: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/44.jpg)
keySet() BeispielDie Methode keySet liefert die Menge (Set) aller "Keys" (Schlüssel) in der Abbildung (Map)
Map<String, Integer> ages = new TreeMap<String, Integer>();ages.put("Roland", 19);ages.put("Clara", 2); ages.put("Sarah", 57);
// ages.keySet() returns Set<String>
for (String name : ages.keySet()) { // Clara -> 2int age = ages.get(name); // Roland -> 19System.out.println(name + " -> " + age); // Sarah -> 57
} 53
![Page 45: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/45.jpg)
keySet() BeispielDie Methode keySet liefert die Menge (Set) aller "Keys" (Schlüssel) in der Abbildung (Map)
Map<String, Integer> ages = new TreeMap<String, Integer>();ages.put("Roland", 19);ages.put("Clara", 2); ages.put("Sarah", 57);
// ages.keySet() returns Set<String>// here: ["Clara","Roland","Sarah"]
for (String name : ages.keySet()) { // Clara -> 2int age = ages.get(name); // Roland -> 19System.out.println(name + " -> " + age); // Sarah -> 57
} 54
![Page 46: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/46.jpg)
put(…) überschreibt!§ Diese Abbildung (Map) speichert einen Wert (Integer) für einen
Schlüssel (ein String, der "Name")Map<String, Integer> ages = new TreeMap<String,
Integer>();ages.put("Roland", 19);ages.put("Clara", 2); ages.put("Sarah", 57);ages.put("Clara", 3); // Clara had her birthday
for (String name : ages.keySet()) { // Clara -> 3int age = ages.get(name); // Roland -> 19System.out.println(name + " -> " + age); // Sarah -> 57
}57
![Page 47: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/47.jpg)
values()
§ Die Methode values liefert eine Ansammlung aller in derMap auftretenden Werte§ Kann diese Werte mit einer for each Schleife abarbeiten§ Aber: Es gibt keinen einfachen Weg die Keys für einen Wert zu finden
59
![Page 48: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/48.jpg)
Weitere MapMethoden
60
keySet() returns a set of all keys in the mapvalues() returns a collection of all values in the mapputAll(map) adds all key/value pairs from the given map to this mapequals(map) returns true if given map has the same mappings as this
one
![Page 49: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/49.jpg)
Umkehrfunktion der Abbildung§ Es ist erlaubt, eine Map von Mengen, oder eine Liste von
Listen, oder … zu definieren.
§ Wir wollen für jeden Assistenten seine Durchschnittsnotefesthalten. Abbildung Name->NoteMap<String, Double> note = new HashMap<String, Double>();note.put("Jared", 4.6);note.put("Alyssa", 5.0);note.put("Steve", 5.9);note.put("Stef", 4.6);note.put("Rob", 4.0);... 61
![Page 50: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/50.jpg)
63
4.0
4.6
5.0
5.9
"Rob"
"Alyssa"
"Jared"
" Stef"
" Steve"
![Page 51: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/51.jpg)
System.out.println("Jared's Note ist " + note.get("Jared")); // 4.6
§ Aber die Abbildung erlaubt es nicht, einfach nach all den Assistenten zu fragen, die eine bestimmte Note erreichten.§ Was für eine Abbildung bräuchten wir dafür?
64
![Page 52: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/52.jpg)
Umkehrabbildung§ Wir könnten die Abbildung umkehren so dass es eine
Abbildung von Noten auf Assistenten ist. Map<Double, String> note = new HashMap<Double, String>();note.put(4.6, "Jared");note.put(5.0, "Alyssa");note.put(5.9, "Steve");note.put(4.6, "Stef");note.put(4.0, "Rob");...System.out.println("Wer hatte eine 4.6? " +
note.get(4.6)); // ???65
![Page 53: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/53.jpg)
66
4.0
4.6
5.0
5.9
"Rob"
"Alyssa"
"Jared"
" Stef"
" Steve" 4.0
4.6
5.0
5.9
" Jared "
![Page 54: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/54.jpg)
67
4.0
4.6
5.0
5.9
"Rob"
"Alyssa"
"Jared"
" Stef"
" Steve" 4.0
4.6
5.0 "Alyssa"
" Jared "
![Page 55: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/55.jpg)
68
4.0
4.6
5.0
5.9
"Rob"
"Alyssa"
"Jared"
" Stef"
" Steve" 4.0
4.6
5.0
5.9
"Alyssa"
" Jared "
" Steve"
![Page 56: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/56.jpg)
69
4.0
4.6
5.0
5.9
"Rob"
"Alyssa"
"Jared"
" Stef"
" Steve" 4.0
4.6
5.0
5.9
"Alyssa"
" Stef "
" Steve"
![Page 57: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/57.jpg)
70
4.0
4.6
5.0
5.9
"Rob"
"Alyssa"
"Jared"
" Stef"
" Steve" 4.0
4.6
5.0
5.9
"Alyssa"
"Stef"
" Steve"
"Rob"
![Page 58: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/58.jpg)
§ Aber dieser Ansatz ist keine Lösung.
§ Wo ist das Problem?§ Mehr als ein Assistant kann den selben Notendurchschnitt haben.§ Die Map speichert nur den letzten Eintrag
73
![Page 59: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/59.jpg)
Korrekte Umkehrabbildung§ Jede Note muss auf eine Sammlung (Collection) von
Assistenten abgebildet werden.
Map<Double, Set<String>> note = new HashMap<Double, Set<String>>();
74
![Page 60: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/60.jpg)
Korrekte UmkehrabbildungMap<Double, Set<String>> note =
new HashMap<Double, Set<String>>();note.put(4.6, new TreeSet<String>());note.get(4.6).add("Jared");note.put(5.0, new TreeSet<String>());note.get(5.0).add("Alyssa");note.put(5.9, new TreeSet<String>());note.get(5.9).add("Steve");note.get(4.6).add("Stef");note.put(4.0, new TreeSet<String>());note.get(4.0).add("Rob");...System.out.println("Wer hatte eine 4.6? " +
note.get(4.6)); // [Jared, Stef]
77
![Page 61: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/61.jpg)
78
![Page 62: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/62.jpg)
79
![Page 63: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/63.jpg)
80
![Page 64: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/64.jpg)
81
![Page 65: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/65.jpg)
82
![Page 66: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/66.jpg)
83
![Page 67: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/67.jpg)
84
![Page 68: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/68.jpg)
85
![Page 69: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/69.jpg)
86
![Page 70: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/70.jpg)
Korrekte UmkehrabbildungMap<Double, Set<String>> note =
new HashMap<Double, Set<String>>();note.put(4.6, new TreeSet<String>());note.get(4.6).add("Jared");note.put(5.0, new TreeSet<String>());note.get(5.0).add("Alyssa");note.put(5.9, new TreeSet<String>());note.get(5.9).add("Steve");note.get(4.6).add("Stef");note.put(4.0, new TreeSet<String>());note.get(4.0).add("Rob");...System.out.println("Wer hatte eine 4.6? " +
note.get(4.6)); // [Jared, Stef]
§ Wichtig ist dass die Menge initialisiert ist bevor das 1. Element hinzugefügt wird. 87
![Page 71: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/71.jpg)
Übung
1. Schreiben Sie ein Programm, das zählt wievieleverschiedene Wörter in einem Text auftauchen.§ Speichern Sie die Wörter in einer (An)Sammlung und halten Sie fest
wie oft ein Wort in dem Text auftritt. § Nach dem Einlesen des Textes sollte es möglich sein, festzustellen
wie oft ein bestimmtes Wort im Text auftritt.
2. Geben Sie jedes Wort das mindestens 1000mal auftritt aus(a) und entfernen es aus der Menge (b)
88
![Page 72: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/72.jpg)
Lösung der 1. Übungsaufgabe// read file into a map of [word --> number of occurrences]
Map<String, Integer> wordCount = new HashMap<String, Integer>();
Scanner input = new Scanner(new File("mobydick.txt"));
while (input.hasNext()) {
String word = input.next();
if (wordCount.containsKey(word)) {
// seen this word before; increase count by 1
int count = wordCount.get(word);
wordCount.put(word, count + 1);
} else {
// never seen this word before
wordCount.put(word, 1);
}
} 89
![Page 73: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/73.jpg)
Scanner console = new Scanner(System.in);
System.out.print("Word to search for? ");
String word = console.next();
System.out.println("appears " + wordCount.get(word) +
" times.");
90
![Page 74: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/74.jpg)
Übung (Fortsetzung)
1. Geben Sie jedes Wort das mindestens 1000mal auftritt aus(a) und entfernen es aus der Menge (b)
§ Wie finden wir diese Wörter?§ Wie können wir alle Wörter besuchen (dann können wir abfragen
wie oft das Wort aufgetreten ist)?
91
![Page 75: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/75.jpg)
Übung (Fortsetzung)
1. Geben Sie jedes Wort das mindestens 1000mal auftritt aus(a) und entfernen es aus der Menge (b)
§ Wie finden wir diese Wörter?§ Wie können wir alle Wörter besuchen (dann können wir abfragen
wie oft das Wort aufgetreten ist)?Set<String> inText = wordCount.keySet();for (String s : inText) {if ((wordCount.get(s) > 999) { .. .. ..
92
![Page 76: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/76.jpg)
10.6 Iteratoren
93
![Page 77: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/77.jpg)
Mit den Elementen einer Menge (Set) arbeiten
§ Iteration über alle Elemente einer Menge:Set<Double> scores = newHashSet<Double>();for (Double score : scores) {String msg = "The score is " + score;System.out.println(msg);
}
§ HashSet und TreeSet bearbeiten Elemente (evtl) in unterschiedlicher Reihenfolge
§ Bei Abbildungen (Map) liefert keySet() oder values() eine Menge 96
![Page 78: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/78.jpg)
Lösungsversuch (Teil 2)
§ Finden, dann entfernen aller Wörter, die mehr als 999 mal auftreten:Set<String> inText = wordCount.keySet();for (String s : inText) {if ((wordCount.get(s) > 999) {wordCount.remove(s);
}§ Leider tritt während der Ausführung (wenn es Wörter gibt die
> 999 auftreten) eine Exception auf
§ Problem: Die "for each" Schleife ist "read-only", d.h. die Menge darf nicht modifiziert werden während der Loop ausgeführt wird.
97
![Page 79: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/79.jpg)
Exception in thread "main" java.util.ConcurrentModificationExceptionat java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1493)at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1516)at Example2a.main(Example2a.java:35)
98
![Page 80: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/80.jpg)
Iteratoren§ Anderer Weg eine Iteration zu kontrollieren§ Iterator ("iterator"): Ein Objekt das einem Klienten erlaubt,
die Elemente einer Ansammlung zu besuchen§ Erinnert sich an die (aktuelle) Position and erlaubt es
§ auf das Element an dieser Position zuzugreifen§ das Element an dieser Position zu entfernen§ abzufragen ob es weitere Elemente gibt§ zur nächsten Position vorzurücken
101
![Page 81: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/81.jpg)
103
index 0 1 2 3 4 5 6 7 8 9value 3 8 9 7 5 1
20 0 0 0
size 6
list
iterator Aktuelles Element: 9Aktueller Index: 2Aktuelles Element: 9Nächster Index: 3
![Page 82: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/82.jpg)
104
index 0 1 2 3 4 5 6 7 8 9value 3 8 9 7 5 1
20 0 0 0
size 6
list
Aktuelles Element: 7Nächster Index: 4iterator
![Page 83: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/83.jpg)
105
index 0 1 2 3 4 5 6 7 8 9value 3 8 9 7 5 1
20 0 0 0
size 6
list
set"the"
"to""from"
"we"
Aktuelles Element: "from"Nächstes Element: "the"iterator
"a"
Aktuelles Element: 7Nächster Index: 4iterator
![Page 84: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/84.jpg)
106
index 0 1 2 3 4 5 6 7 8 9value 3 8 9 7 5 1
20 0 0 0
size 6
list
set"the"
"to""from"
"we""a"
"a""to""from""the""we"
MöglicheReihenfolge
iterator Aktuelles Element: "from"Nächstes Element: "the"
Aktuelles Element: 7Nächster Index: 4iterator
![Page 85: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/85.jpg)
107
index 0 1 2 3 4 5 6 7 8 9value 3 8 9 7 5 1
20 0 0 0
size 6
list
set"the"
"to""from"
"we""a"
"from""the""to""we""a"iterator
Andere möglicheReihenfolge
Aktuelles Element: "from"Nächstes Element: "the"
Aktuelles Element: 7Nächster Index: 4iterator
![Page 86: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/86.jpg)
Iterator Methoden
§ Iterator ist ein Interface in java.util§ Jede Ansammlung stellt die iterator() Methode zur Verfügung,
die einen Iterator liefert mit dem die Elemente besucht werdenkönnen. Set<String> set = new HashSet<String>();...Iterator<String> itr = set.iterator();
hasNext() returns true if there are more elements to examinenext() returns the next element from the collection (throws a
NoSuchElementException if there are none left to examine)remove() removes the last value returned by next() (throws an
IllegalStateException if you haven't called next() yet)
108
![Page 87: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/87.jpg)
109
set"the"
"to""from"
"we""a"
"from""the""to""we""a"
current next hasNext"from" "the" true"the" "to" true"to" "we" true"we" "a" true"a" false
iterator Aktuelles Element: "from"Nächstes Element: "the"
![Page 88: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/88.jpg)
110
![Page 89: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/89.jpg)
Iterator Beispiel 1
Set<Integer> scores = new TreeSet<Integer>();
scores.add(94); // Lisascores.add(38); // Kimscores.add(87); // Royscores.add(43); // Martyscores.add(72); // Marisa
111
![Page 90: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/90.jpg)
Iterator Beispiel 1 (Teil 2)
Iterator<Integer> itr = scores.iterator();System.out.println(scores); // [38, 43, 72, 87, 94]
while (itr.hasNext()) {int score = itr.next();
// eliminate any failing gradesif (score < 60) {
itr.remove();}
}System.out.println(scores); // [72, 87, 94]
112
![Page 91: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/91.jpg)
Iterator Beispiel 2Map<String, Integer> scores;scores = new TreeMap<String, Integer>();
scores.put("Kim", 38);scores.put("Lisa", 94);scores.put("Roy", 87);scores.put("Marty", 43);scores.put("Marisa", 72);
115
![Page 92: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/92.jpg)
Iterator Beispiel 2Map<String, Integer> scores;scores = new TreeMap<String, Integer>();
scores.put("Kim", 38);scores.put("Lisa", 94);scores.put("Roy", 87);scores.put("Marty", 43);scores.put("Marisa", 72);
38
43
72
87
94
"Marisa"
"Kim"
"Lisa"
"Marty"
"Roy"
116
![Page 93: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/93.jpg)
Iterator Beispiel 2
38
43
72
87
94
"Marisa"
"Kim"
"Lisa"
"Marty"
"Roy"
scores.keyset():
[Kim, Lisa, Marisa, Marty, Roy] 117
![Page 94: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/94.jpg)
Iterator Beispiel 2 (Teil 2)Iterator<String> itr = scores.keySet().iterator();System.out.println(scores.keySet()); // [Kim, Lisa, Marisa, Marty, Roy]
while (itr.hasNext()) {String name = itr.next();int score = scores.get(name);System.out.println(name + " got " + score);
// eliminate any failing students
if (score < 60) {itr.remove(); // removes name and score
}}System.out.println(scores); // {Lisa=94, Marisa=72, Roy=87} 120
![Page 95: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/95.jpg)
Iterator Beispiel 2 (Output)
[Kim, Lisa, Marisa, Marty, Roy]
Kim got 38
Lisa got 94
Marisa got 72
Marty got 43
Roy got 87
// nach Entfernen der Personen mit score < 60
{Lisa=94, Marisa=72, Roy=87}121
![Page 96: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/96.jpg)
Iterator Beispiel 2 – HashMap Variation
scores = new HashMap<String, Integer>();
Gleiches Resultat aber andere Reihenfolge der Iteration
[Marisa, Marty, Roy, Kim, Lisa]Marisa got 72Marty got 43Roy got 87Kim got 38Lisa got 94
// nach Entfernen der Personen mit score < 60{Marisa=72, Roy=87, Lisa=94
122
![Page 97: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/97.jpg)
Nett (?) wäre ….while (itr.hasNext()) {
String name = itr.next();
int score = scores.get(name);
System.out.println(name + " got " + score);
// raise any failing students
if (score < 60) {
scores.replace(name, 60);
}
}123
![Page 98: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/98.jpg)
Unfair (?) wäre ….while (itr.hasNext()) {
String name = itr.next();
int score = scores.get(name);
System.out.println(name + " got " + score);
// raise any failing students
if (score < 60) {
scores.put(name, 60);
}
}124
![Page 99: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/99.jpg)
Nicht möglich wäre ….while (itr.hasNext()) {
String name = itr.next();
int score = scores.get(name);
System.out.println(name + " got " + score);
// raise any failing students
if (score < 60) {
scores.put("* " + name, 60);
}
}125
Ergibt wieder Laufzeitfehlerda es keinen Eintrag fürdiesen (neuen) Namen gibt!
![Page 100: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/100.jpg)
Zusammenfassung Iterator§ Iterator entkoppelt Abarbeiten/Besucher der Elemente einer
Ansammlung von den Details der Darstellung§ Klient muss nicht geändert werden wenn sich die Darstellung ändert
§ Iterator erlaubt Entfernen eines Elements in der Schleife§ Siehe Beispiel 2
127
![Page 101: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/101.jpg)
252-0027Einführung in die Programmierung
Stil und KonventionenTeil 2
Thomas R. Gross
Department InformatikETH Zürich
![Page 102: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/102.jpg)
Layout -- Wiederholung§ Nicht mehr als 100 Zeichen pro Zeile
§ Neue Zeile für jede Anweisung§ Keine unnötigen neuen Zeilen (neue Zeile wenn alte Zeile nicht
ausreicht oder zur Trennung von (unabhängigen) Aktionen)
§ Manche Gruppen empfehlen < 80 Zeichen pro Zeile
129
![Page 103: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/103.jpg)
Layout -- Wiederholung§ Aufeinanderfolgende Anweisungen untereinander
int x = 10;int y = x + 1;
§ Gleich weit eingerückt
§ Jeder neue Block wird eingerückt§ 2, 4, 6 (selten 8) Leerzeichen
130
![Page 104: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/104.jpg)
Beispielif (a == 1) {System.out.println(a);x = 3;b = b + x;} else if (a == 2) {System.out.println(a);x = 6;y = y + 10;b = b + x;} else { // a == 3System.out.println(a);x = 9;b = b + x;}
![Page 105: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/105.jpg)
Beispielif (a == 1) {
System.out.println(a);x = 3;b = b + x;
} else if (a == 2) {System.out.println(a);x = 6;y = y + 10;b = b + x;
} else { // a == 3System.out.println(a);x = 9;b = b + x;
}
![Page 106: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/106.jpg)
Variablennamen
§ Kurze Variablennamen reserviert für Loopcounter§ D.h. i, j, k usw sollten immer Loopcounter sein§ Idealerweise im for Statement deklariert§ for (int i = 0; …; i++) { … }§ for (double d : measuredTemp) { … }
§ Standard Konvention§ MyClass für Typen: Klassen und Interfaces
§ MyClass() ist dann der Konstruktor der Klasse§ myVariable für Attribute, Parameter und Variable (static und local)
§ myMethod() für Methoden§ MY_CONSTANT für Konstanten (sind final) 133
![Page 107: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/107.jpg)
Leerzeichen§ Kosten wenig – können helfen§ Einrücken von Blöcken
§ Trennen Keywords§ for▢(int i = 1; …) oder while▢(true) § for(int i=1; …) oder while(true)
§ Aber§ myMethod(params) oder myMethod()§ myMethod▢(params) oder myMethod▢▢▢()
§ Methodenaufrufe sind so schnell zu erkennen 134
![Page 108: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/108.jpg)
Leerzeichen§ Zuweisungsoperator = mit Leerzeichen abgesetzt§ Keine Leerzeichen nach ( oder vor )
135
![Page 109: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/109.jpg)
NewLines§ Strukturieren ein Programm§ Immer vor/nach Methodendeklaration
§ Gilt auch für Konstruktoren …
§ Eine Anweisung per Zeile§ Anweisungen die eine Gruppe bilden werden durch
NewLines abgegrenzt
136
![Page 110: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/110.jpg)
NewLines§ Schreiben Sie Code der durchsucht werden kann§ new Operator mit Konstruktor auf eine Zeile, ein Leerzeichen
§ Also new▢Foo(parameter) und nichtnewFoo(parameter)
oder new▢▢▢Foo(parameter)§ Lange Ausdrücke: nach Operator trennen
§ und Rest einrücken137
a+b+c+dwenn kein Platza+b+
c+d
![Page 111: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/111.jpg)
Methoden
§ Kurze Programme sind schneller zu lesen
§ Keine Code Duplikation!
§ Methoden erlauben Wiederverwendung
§ In der Regel nicht mehr als 20-40 Anweisungen pro Methode
§ Es gibt manchmal gute Gründe für Ausnahmen
§ (z.B. switch Statement, geschachtelte if-Statements)
§ Wenn es mehr Anweisungen gibt: separate Methode!
138
![Page 112: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/112.jpg)
Sichtbarkeit und Zugriffsrechte§ Methoden sind zuerst private und bleiben private – es
sei denn ein Klient ruft sie auf§ Klassen sind public wenn es Klienten gibt§ Attribute die verändert werden können sind private
§ Zugriff via "getter" und "setter" Methoden§ Flexibel – kann Darstellung (des Attributes) später ändern
139
![Page 113: 252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon](https://reader035.fdocuments.net/reader035/viewer/2022071515/6136d16f0ad5d20676484373/html5/thumbnails/113.jpg)
Methoden§ Kurze Parameterlisten
§ If you have a procedure with ten parameters, you probably missed some. (Alan Perlis Epigrams in Programming)
§ Eine Methode sollte ein Problem/eine Aufgabe lösen
140
§ Kurze Methoden sind schneller zu verstehen
§ Parameter sollten nicht (in der Methode) modifiziert werden