113
252-0027 Einführung in die Programmierung 10.0 Generische Programmierung Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016, 2019 All rights reserved.

252-0027 Einführungin dieProgrammierung 10.0 … · 2019. 12. 3. · Übersicht §10.1 Einleitung §10.2 ArrayList §ArrayList §Wrapper Typen §10.3 Vergleichenvon

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

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

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

Ü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

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

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

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

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

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

§ 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

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

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

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

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

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

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

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

Ü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

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

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

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

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

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

∀ 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

§ 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

§ 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

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

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

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

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

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

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

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

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

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

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

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

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

Ü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

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

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

Ü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

Ü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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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