• Keine Ergebnisse gefunden

252-0027 Einführung in die Programmierung 10.0 Generische Programmierung

N/A
N/A
Protected

Academic year: 2022

Aktie "252-0027 Einführung in die Programmierung 10.0 Generische Programmierung"

Copied!
91
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)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..

(2) Übersicht § 10.1 Einleitung § 10.2 ArrayList<T> § 10.3 Vergleichen von Objekten. 3.

(3) 10.1 Einleitung. 4.

(4) So#ware Entwicklung § Programmieren ist anspruchsvoll § Es ist leicht Fehler zu machen. § Zwei Ansätze diese Aufgabe zu lösen § Abstraktion § Wiederverwendung von Software. 5.

(5) Software Wiederverwendung Angestellte. § Vererbung (inheritance): Klassen übernehmen Code der Superklasse. Arzt/Ärz-n. § Ist ein formaler Parameter vom Typ "Referenzen auf Superklasse" so kann der aktuelle Parameter vom Typ "Referenz auf Subklasse" sein.. FaGe (Pflege). Adminstrator /in. OP-Fachkraft. § Interfaces erlauben flexiblere Typhierarchie § Ist ein formaler Parameter vom Typ "Referenzen auf Interface" so kann der aktuelle Parameter auf ein Exemplar irgendeiner Klasse verweisen, die das Interface implementiert.. 6.

(6) Software Entwicklung § Programmieren ist anspruchsvoll § Es ist leicht Fehler zu machen. § Zwei Ansätze diese Aufgabe zu lösen § Abstraktion § Wiederverwendung von Software. § Wir würden gerne Software wiederverwenden § Auf früheren Lösungen aufbauen § Von LinkedIntList zu LinkedPointList, LinkedShapeList, LinkedPersonList, ….. 7.

(7) Von LinkedIntList zu LinkedPointList § Wir ha2en LinkedIntList gesehen § Eine Liste von int (ganzen Zahlen) § Methoden int get(), int pop(); int top(), push(int), addLast(int), addFirst(int), etc.. § Wir können uns auch eine Liste von Point Objekten vorstellen § Eine Liste von Verweisen auf Point Exemplare Reference Semantics! § Methoden Point get(), Point pop(); Point top(), push(Point), addLast(Point), addFirst(Point), etc. § LinkedPointList 9.

(8) LinkedPointList Interface public interface PointListIF { public public. Point get(int index); void set(int index, Point value);. public. boolean isEmpty();. public public. Point pop(); Point top();. public public. Point removeFirst(); void addFirst(Point value);. public public. void push(Point value); void clear();. public Point[] toArray(); // … usw. 10.

(9) LinkedIntList Interface public interface IntListIF { public public. int get(int index); void set(int index, int value);. public. boolean isEmpty();. public public. int top(); int pop();. public public. int removeFirst(); void addFirst(int value);. public public. void push(int value); void clear();. public int[] toArray(); // … usw. 11.

(10) LinkedPointList. /** * A singly-linked list of Point references with * fast addFirst and addLast methods */ public class LinkedPointList implements PointListIF { public Point get(int index) { .. } public void set(int index, Point value) { .. } public boolean isEmpty() { .. } public void addFirst(Point value) { .. } }. ..... 12.

(11) LinkedIntList mit Interface. /** * A singly-linked list of integer values with * fast addFirst and addLast methods */ public class LinkedIntList implements IntListIF { public int get(int index) { .. } public void set(int index, int value) { .. } public boolean isEmpty() { .. } public void addFirst(int value) { .. } /** * For internal use only. */. }. private LIntNode getNode(int index) { public LIntNode first; ..... ... } 13.

(12) Von LinkedPointList zu LinkedShapeList § Wir können uns auch eine Liste von Shape Objekten vorstellen § Eine Liste von Verweisen auf Exemplare des Typs Shape § Exemplare der Klassen Circle, Rectangle, Triangle (die Interface Shape implemenEeren) § Methoden Shape get(), Shape pop(); Shape top(), push(Shape), addLast(Shape), addFirst(Shape), etc.. § Wie wollen wir diese Interfaces (und später) Klassen erstellen? § Wir können das PointListIF kopieren und ediEeren … 14.

(13) LinkedShapeList Interface public interface ShapeListIF { public public. Shape get(int index); void set(int index, Shape value);. public. boolean isEmpty();. public public. Shape pop(); Shape top();. public public. Shape removeFirst(); void addFirst(Shape value);. public public. void push(Shape value); void clear();. public Shape[] toArray(); // … usw. 15.

(14) Interfaces § Trennen sichtbares Verhalten (geforderte Methoden) von der Implementation dieser Methoden § Interface: Methodennamen (inkl. Parameter und Rückgabewert) – abstrakte Methoden § Klasse (die Interface implementiert): Konkretes Programm § Können Implementation verbessern/ändern ohne Klienten zu ändern. § Aber Interfaces arbeiten mit [fixen] Typen (Klassen oder Interface) § PointListIF, ShapeListIF, ….. 16.

(15) § Wir wollen möglichst einfach (für die Programmierung) mit Exemplaren unterschiedlicher Typen arbeiten können § Listen und ähnliche Datenstrukturen werden häufig gebraucht, wir wollen nicht immer das Rad (das Interface) neu erfinden müssen § Unbegrenzte Anzahl von Elementen § InterpretaKon der Reihenfolge offen. 17.

(16) LinkedIntList, LinkedPointList, LinkedShapeList, … § LinkedIntList: Menge von int Werten (ganzen Zahlen) § LinkedIntList: der Grösse nach sortierte Menge von int Werten § LinkedIntList: Reihe von int Werten (ganzen Zahlen) in der Reihenfolge des Einfügens § … § LinkedPointList: Menge von Point Referenzen § LinkedShapeList: Menge von Shape Referenzen. 20.

(17) Linked_irgendein_Typ_List § LinkedPointList: Menge von Point Referenzen § LinkedShapeList: Menge von Shape Referenzen § LinkedStringList: Menge von Strings § LinkedFileList: Menge von File Referenzen § …. 21.

(18) Linked_ein_Typ_irgendeine_Interpreta,on § LinkedPointList: Menge von Point Referenzen (2D Punkten) § LinkedPointList: sor,erte Menge von Point Referenzen § Sor,ert entlang der X-Achse (oder Y-Achse, oder Abstand von (0,0)). § LinkedPointList: Reihe von Point Referenzen in der Reihenfolge des Einfügens § LinkedPointList: Reihe von Point Referenzen in der Reihenfolge in der sie gezeichnet werden sollen 22.

(19) LinkedPointList, LinkedShapeList, … § LinkedPointList:. Menge von Point Referenzen. § LinkedShapeList:. Reihe von Shape Referenzen. § LinkedStringList: sortierte Menge von Strings § LinkedFileList: gemeinsam:. Menge von File Referenzen Ansammlung ("Collection"). 23.

(20) Collection § "collection" (Sammlung, Ansammlung): ein Objekt das (eine Sammlung von) Daten speichert; eine "Datenstruktur" § Die Objekte die gespeichert werden heissen Elemente § Einige Collections sind geordnet; einige erlauben Duplikate § Typische Operationen: add, remove, clear, contains (search), size § D.h. hinzufügen, entfernen, zurücksetzen, enthält?, Grösse. § Begriff für eine Vielzahl von Datenstrukturen § Aber für uns stehen die Operationen im Vordergrund, nicht die Implementation 24.

(21) Was wir wollen sieht etwa so aus public interface Collection { public public public public public. void void boolean Typ int. add (Typ element); clear(); contains(Typ element); remove(int index); size();. … } 27.

(22) Was wir wollen sieht etwa so aus public interface Collection { public public public public public. void void boolean Typ int. add (Typ element); clear(); contains(Typ element); remove(int index); size();. … }. § Später sehen wir wie Typ angegeben werden kann § Es gibt so ein Interface in Java – Basis für wichtige Klassen. 28.

(23) Java Collections Framework <<Interface> Map. <<Interface> Collec0on. <<Interface> List. <<Interface> Set. <<Interface> SortedSet. <<Interface> SortedMap. 30.

(24) Collection Beispiele § Collection Interface Basis für diverse Sub-Interfaces § "Collec9on Klassen" implemen9eren (Sub)-Interface(s) § (dazu gleich mehr). § Beispiele aus den Java Bibliotheken: LinkedList, ArrayList, HashMap, TreeSet, PriorityQueue. § Alle Collec9on Klassen sind in java.util; müssen also impor9ert werden import java.util.*;. 31.

(25) Java Collections Framework <<Interface> Map. <<Interface> Collection. <<Interface> List. <<Interface> Set. <<Interface> SortedMap. <<Interface> SortedSet. ArrayList. LinkedList. HashSet. TreeSet. HashMap. TreeMap. 33.

(26) Java Collec*ons Framework <<Interface> Map. <<Interface> Collection. <<Interface> List. <<Interface> Set <<Interface> SortedMap. <<Interface> SortedSet. ArrayList. LinkedList. HashSet. TreeSet. HashMap. Interfaces: Collection, Map, Iterator, List, Set, … Klassen: ArrayList, LinkedList, HashSet, Service Klassen: Collections (ähnlich wie Arrays). TreeMap. 34.

(27) Weiter mit einem Beispiel § Einlesen einer Datei von Wörtern § Bearbeiten der Substan7ve (fangen mit einem Grossbuchstaben an) § … § Ein Array mit einer fixen Grösse ist keine Lösung. § Ein genauerer Blick auf Listen § und was für Listen von den Collec7on Klassen angeboten werden. 43.

(28) 45.

(29) Listenobjekte § Eine Liste hat mehr Zustand als nur die Elemente § Müssen auch festhalten, was das 1. Element ist (und sinnvoll ist es auch, das letzte Element zu kennen). § Eine Liste besteht daher aus mehr als nur den Knoten § Wir erstellen daher ein Objekt, dass die "Liste" der (verknüpften) Elemente representiert § Am Anfang eine leere Liste [] 46.

(30) Listenobjekte § Zu einer solchen Liste können Elemente hinzugefügt werden. § Das default Verhalten ist es, Elemente am Ende der Liste hinzuzufügen. [hello, ABC, goodbye, okay]. § Das Listenobjekt hält fest, welche Elemente hinzugefügt wurden, den Index, die Anzahl der Elemente, die Reihenfolge.. 47.

(31) 10.2 ArrayList. 48.

(32) ArrayList § Java stellt die Klasse ArrayList für solche Listenobjekte zur Verfügung § "Array" erinnert daran, dass die Elemente über einen Index erreicht werden können § Die Anzahl der Elemente ist unbegrenzt (im Prinzip) § Eine ArrayList ist wie ein dynamischer Array (der die Grösse an die Anzahl Elemente anpasst) § Die Implementation basiert auf einem Array und einem Attribut für die aktuelle Grösse (Anzahl Elemente). 49.

(33) ArrayList Methoden add(value). appends value at end of list. add(index, value). inserts given value just before the given index, shifting subsequent values to the right. clear(). removes all elements of the list. indexOf(value). returns first index where given value is found in list (-1 if not found). get(index). returns the value at given index. remove(index). removes/returns value at given index, shifting subsequent values to the left. set(index, value). replaces value at given index with given value. size(). returns the number of elements in list. toString(). returns a string representation of the list such as "[3, 42, -7, 15]" 51.

(34) ArrayList Methoden addAll(list) addAll(index, list). adds all elements from the given list to this list (at the end of the list, or inserts them at the given index). contains(value). returns true if given value is found somewhere in this list. containsAll(list). returns true if this list contains every element from given list. equals(list). returns true if given other list contains the same elements. iterator() listIterator(). returns an object used to examine the contents of the list (seen later). lastIndexOf(value). returns last index value is found in list (-1 if not found). remove(value). finds and removes the given value from this list. removeAll(list). removes any elements found in the given list from this list. retainAll(list). removes any elements not found in given list from this list. subList(from, to). returns the sub-portion of the list between indexes from (inclusive) and to (exclusive). toArray(). returns the elements in this list as an array 52.

(35) Die Elemente von ArrayList § Was für Elemente wollen wir in ArrayList speichern? § Wie können wir ArrayList so aufsetzen, dass wir diese Methoden für alle Arten von Objekten nutzen können?. 53.

(36) Die Elemente von ArrayList § Was für Elemente wollen wir in ArrayList speichern? § Wie können wir ArrayList so aufsetzen, dass wir diese Methoden für alle Arten von Objekten nutzen können? § Der Typ der Elemente sollte ein Parameter sein, wenn wir ein Exemplar der Klasse ArrayList erstellen § Java erlaubt generische Typen ("generic types") – Klassendefinitionen mit einem Typparameter 54.

(37) Typparameter ArrayList<Type> name = new ArrayList<Type>(); Wenn wir ein ArrayList Objekt konstruieren (oder eine Referenzvariable deklarieren) dann müssen wir den Typ der Elemente der Liste angeben § Der Typ der Elemente muss zwischen < und > angegeben werden. § Wir nennen dies einen Typparameter ("type parameter") § Wir haben hier eine generische Klasse ("generic" class) 55.

(38) ArrayList<Type> name = new ArrayList<Type>(); § Mit einem Typparameter kann die ArrayList Klasse verwendet werden, um Listen verschiedener Typen zu verwalten. § Type muss ein Referenztyp sein § Dazu später mehr § Beispiele: ArrayList<String> names = new ArrayList<String>(); names.add("ETH Zurich"); names.add("Imperial College");. 56.

(39) 57.

(40) ArrayList<Type> name = new ArrayList<Type>(); § Beispiele: ArrayList<Point> figure = new ArrayList<Point>(); Point p = new Point(1,3); figure.add(new Point()); figure.add(p); System.out.println(figure.size()); ArrayList<Shape> figure = new ArrayList<Shape>(); Shape s = new Circle(); figure.add(s); 58.

(41) Typparameter § Der Typparameter kann auch in der Definition einer Klasse verwendet werden class MyType<T> { T intern; String s; public MyType() { } // may need default constructor public MyType(T i) { intern = i; s = i.toString(); }. }. public String toString() { return s; }. Dann … MyType<Point> mine; Point p = new Point(2,4); mine = new MyType<Point>(p); 60.

(42) 61.

(43) Typparameter § Die Konven0on ist es, einen einzelnen Grossbuchstaben als Namen für einen Typparameter zu verwenden class MyType<T> { }. § Damit kann man schnell erkennen welche Parameter einen Typ bezeichnen § Mehrere Typparameter sind möglich. § Wir werden uns zuerst mit dem Gebrauch von generischen Klassen beschäFigen § Entwicklung generischer Klassen muss warten. 62.

(44) Wo kann ich mehr erfahren? § Die Java API Specification (Java 12) (oder Java 10) enthält Informationen über alle Klassen, die Teil der Java Umgebung sind. § Nicht Teil der Sprache sondern Teil der Umgebung. § Sehr praktisch – wer kann sich schon alle Methoden merken. § Konvention für Typparameter § § § §. E – Element (häufig im Java Collections Framework) K – Key (später mehr) N – Number T – Type (irgendwo) 63.

(45) https://docs.oracle.com/javase/10/docs/api/ java/util/ArrayList.html Später mehr. https://docs.oracle.com/javase/12/docs/api/ java/util/ArrayList.html. 65.

(46) Supertyp: Collection. 68.

(47) 69.

(48) 70.

(49) 71.

(50) 72.

(51) Später mehr. 73.

(52) Beispiel - einfach import java.util.*; public class ListTest { public static void main (String[] args) { ArrayList<String> list = new ArrayList<String>(); names.add("ETH Zurich"); names.add("Imperial College"); names.add("ETH Lausannee"); for (int i = 0; i < names.size(); i++) { if (names.get(i).startsWith("ETH")) { System.out.println(names.get(i)); } } } }. 74.

(53) ArrayList – Methoden § Hinzufügen eines Elements list.add("X");. // ["A", "B", "C"] // ["A", "B", "C", "X"]. § Einfügen eines Elements list.add(2, "Y");. // ["A", "B", ,"Y", "C", "X"]. § Zugriff auf ein Element String s = list.get(3);. // "C". § Entfernen eines Elements list.remove(2);. // ["A", "B", "C", "X"]. § Entfernen eines Elements list.remove("B");. // ["A", "C", "X"]. 76.

(54) Beispiel import java.util.*; public class ListTest { public static void main (String[] args) { ArrayList<String> names = new ArrayList<String>(); names.add("ETH Zurich"); names.add("Imperial College"); names.add("ETH Lausanne"); for (int i = 0; i < names.size(); i++) { if (names.get(i).startsWith("ETH")) { System.out.println(names.get(i)); } } } }. 78.

(55) ArrayList im Vergleich mit Array § Konstruktion String[] names = new String[5]; ArrayList<String> list = new ArrayList<String>();. § Speichern eines Wertes names[0] = "Jessica"; list.add("Jessica");. § Zugriff auf ein Element String s = names[0]; String s = list.get(0); 79.

(56) ArrayList im Vergleich mit Array § Zugriff auf alle Elemente die mit "B" anfangen: for (int i = 0; i < names.length; i++) { if (names[i].startsWith("B")) { ... } } for (int i = 0; i < list.size(); i++) { if (list.get(i).startsWith("B")) { ... } } 80.

(57) ArrayList im Vergleich mit Array § Prüfen ob der String "Benson" dabei ist: for (int i = 0; i < names.length; i++) { if (names[i].equals("Benson")) { ... } } if (list.contains("Benson")) { ... }. 81.

(58) Die Aufgabe, 2. Version § Schreiben Sie ein Programm das eine Datei Wort für Wort einliest und die Wörter der Datei als Liste speichert. § Zuerst sollen Sie alle eingelesenen Wörter ausgeben. § Dann sollen Sie alle Wörter in der umgekehrten Reihenfolge ausgeben. § Dann geben Sie alle Substantive (fangen mit Grossbuchstaben an) in Grossbuchstaben aus. § Also Haus à HAUS § Dann geben Sie die Wörter ohne Substantive aus 82.

(59) Lösung (Gerüst) import java.util.*; import java.io.* ; public class Example1 { public static void main(String[] args) throws FileNotFoundException { ArrayList<String> allWords = new ArrayList<String>(); Scanner input = new Scanner(new File("words.txt")); while (input.hasNext()) { String word = input.next(); allWords.add(word); } System.out.println(allWords); } }. 85.

(60) Die Aufgabe, 2. Version § Schreiben Sie ein Programm das eine Datei Wort für Wort einliest und die Wörter der Datei als Liste speichert. § Zuerst sollen Sie alle eingelesenen Wörter ausgeben. § Dann sollen Sie alle Wörter in der umgekehrten Reihenfolge ausgeben. § Dann geben Sie alle Substantive (fangen mit Grossbuchstaben an) in Grossbuchstaben aus. § Also Haus à HAUS § Dann geben Sie die Wörter ohne Substantive aus 86.

(61) Lösung (Ausschnitt) public static void main(String[] args) throws FileNotFoundException { ArrayList<String> allWords = new ArrayList<String>(); Scanner input = new Scanner(new File("words.txt")); ... for (int i = allWords.size()-1; i >= 0; i-- ) { System.out.println(allWords.get(i)); } }. 87.

(62) Die Aufgabe, 2. Version § Schreiben Sie ein Programm das eine Datei Wort für Wort einliest und die Wörter der Datei als Liste speichert. § Zuerst sollen Sie alle eingelesenen Wörter ausgeben. ✅ § Dann sollen Sie alle Wörter in der umgekehrten Reihenfolge ausgeben. ✅ § Dann geben Sie alle SubstanCve (fangen mit Grossbuchstaben an) in Grossbuchstaben aus. § Also Haus à HAUS § Dann geben Sie die Wörter ohne SubstanCve aus 88.

(63) ArrayList mit Basistypen? § Type in ArrayList<Type> muss ein Referenztyp sein … Type kann nicht ein Basistyp sein // illegal -- int cannot be a type parameter ArrayList<int> list = new ArrayList<int>();. § Aber wir wollten doch die LinkedIntList durch ArrayList ersetzen … § Wir brauchen einen Referenztyp (also Subtyp von Object) der int Werte speichert. 89.

(64) § Für jeden Basistyp gibt es eine besondere Klasse (die Wrapper Klasse ("wrapper" class, Verschalungsklasse [dt])) die wir in einer solchen Situation verwenden können § Für int ist das Integer // creates a list of wrapped int values ArrayList<Integer> list = new ArrayList<Integer>();. § Für double ist das Double // creates a list of wrapped double values ArrayList<Double> list = new ArrayList<Double>(); 90.

(65) Wrapper Klassen Primitive Type Wrapper Type int Integer double. Double. char. Character. boolean. Boolean. § Ein "wrapper" (Umschlag, Verschalung) ist ein Objekt dessen einziger Zweck es ist, einen Wert eines Basistyps zu speichern. § Eine damit konstruierte Liste kann dann wie gewöhnlich verwendet werden. 91.

(66) 92.

(67) 93.

(68) Was fehlt? § Was sind die Attribute? § Was würden wir erwarten? § Vielleicht ….. 94.

(69) Integer § Es gibt kein A-ribut ("field") welches den Wert speichert § Daher kann der Wert auch nicht verändert werden § Keine der Methoden lässt das zu. § Integer Examplare sind immutable (unveränderbar). 95.

(70) Arbeiten mit Wrapper Exemplaren 1. Automatische Umwandlung: Das Umwandeln eines Basistyps in den entsprechenden Wrapper Typ wird als "boxing" bezeichnet Integer bigI = 5; int j = 7; bigI = j; System.println("bigI = " + bigI); //toString!. 96.

(71) 97.

(72) Arbeiten mit Wrapper Exemplaren Wenn man eine Referenz auf ein Integer Exemplar braucht (und es eine Referenz auf irgendein Exemplar mit diesem Wert sein kann – Integer ist immutable) 2. Methode valueOf der Klasse Integer liefert Referenz auf Integer Exemplar mit (int) Wert value. Integer bigI = Integer.valueOf(5); System.println("bigI = " + bigI); //toString! 98.

(73) 99.

(74) Wrapper Klassen § Der Zugriff auf den Wert des Basistyps wird als "unboxing" bezeichnet § z.B. nötig um mit den Werten zu rechnen Integer bigI = 5; Integer bigJ = Integer.valueOf(7); int k = bigI + bigJ; System.println("k = " + k);. § Es gibt auch Methoden um den Wert zu erhalten (intValue()) oder zu umzuwandeln (z.B. doubleValue()) 100.

(75) Integer Parameter § Was gibt dieses Programm(segment) aus? Integer myBigI = Integer.valueOf(777); test(myBigI); System.out.println(myBigI); ----public static void test(Integer bigI) { System.out.println(bigI); Integer someI; someI = 333; System.out.println(someI); bigI = Integer.valueOf(666); System.out.println(bigI); }. Output: 777 333 666 777. 102.

(76) Wrapper Klassen § Eine mit Wrappern konstruierte Liste kann dann wie gewöhnlich verwendet werden ArrayList<Double> noten = new ArrayList<Double>(); noten.add(5.75); noten.add(3.5); ... double myGrade = noten.get(0);. 103.

(77) Die Aufgabe, 2. Version § Schreiben Sie ein Programm das eine Datei Wort für Wort einliest und die Wörter der Datei als Liste speichert. § Zuerst sollen Sie alle eingelesenen Wörter ausgeben. ✅ § Dann sollen Sie alle Wörter in der umgekehrten Reihenfolge ausgeben. ✅ ➡ Dann geben Sie alle SubstanCve (fangen mit Grossbuchstaben an) in Grossbuchstaben aus. § Also Haus à HAUS § Dann geben Sie die Wörter ohne SubstanCve aus 104.

(78) 105.

(79) 106.

(80) Lösung (Ausschnitt) public static void main(String[] args) throws FileNotFoundException { ArrayList<String> allWords = new ArrayList<String>(); Scanner input = new Scanner(new File("words.txt")); ... for (int i=0; i < allWords.size(); i++ ) { String s = allWords.get(i); if (Character.isUpperCase(s.charAt(0))) { System.out.println(s.toUpperCase()); } } } 107.

(81) Die Aufgabe, 2. Version § Schreiben Sie ein Programm das eine Datei Wort für Wort einliest und die Wörter der Datei als Liste speichert. § Zuerst sollen Sie alle eingelesenen Wörter ausgeben. ✅ § Dann sollen Sie alle Wörter in der umgekehrten Reihenfolge ausgeben. ✅ § Dann geben Sie alle SubstanCve (fangen mit Grossbuchstaben an) in Grossbuchstaben aus. ✅ § Also Haus à HAUS § Dann geben Sie die Wörter ohne SubstanCve aus 115.

(82) Lösung (Ausschnitt) public static void main(String[] args) throws FileNotFoundException { ArrayList<String> allWords = new ArrayList<String>(); Scanner input = new Scanner(new File("words.txt")); ... for (int i=0; i < allWords.size(); i++ ) { String s = allWords.get(i); if (!Character.isUpperCase(s.charAt(0))) { System.out.println(s); } } } 116.

(83) Legale und Illegale Indize § Gegeben sei ArrayList<String> allWords = new ArrayList<String>();. § Der Index für einen Zugriff auf ein Element der Liste (z.B. allWords.get(i)) muss zwischen 0 und der Grösse der Liste - 1 liegen (einschliesslich) § 0 <= index <= allWords.size() - 1. § Ein Zugriff auf ein Element ausserhalb dieses Bereichs hat eine IndexOutOfBoundsException zur Folge. 117.

(84) index. 0. value. Bob. 1. 2. Pete Vicki. 3 Sue. ArrayList<String> names = new ArrayList<String>(); names.add(”Bob"); names.add(”Pete"); names.add(”Vicki"); names.add(”Sue"); System.out.println(names.get(0)); System.out.println(names.get(3)); System.out.println(names.get(-1)); names.add(9, "Aimee");. // // // //. okay okay exception exception 118.

(85) ArrayList ”Rätsel" ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 1; i <= 10; i++) { list.add(10 * i); // [10, 20, 30, 40, ..., 100] }. § Was gibt dieses Programmsegment aus? for (int i = 0; i < list.size(); i++) { list.remove(i); } System.out.println(list);. § Antwort: [20, 40, 60, 80, 100] 121.

(86) 122.

(87) ArrayList ”Rätsel" 2 ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 1; i <= 5; i++) { list.add(2 * i); // [2, 4, 6, 8, 10] }. § Was gibt dieses Programmsegment aus? int size = list.size(); for (int i = 0; i < size; i++) { list.add(i, 42); // add 42 at index i } System.out.println(list); 125.

(88) 127.

(89) ArrayList ”Rätsel" 2 ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 1; i <= 5; i++) { list.add(2 * i); // [2, 4, 6, 8, 10] }. § Was gibt dieses Programmsegment aus? int size = list.size(); for (int i = 0; i < size; i++) { list.add(i, 42); // add 42 at index i } System.out.println(list);. § Antwort: [42, 42, 42, 42, 42, 2, 4, 6, 8, 10]. 129.

(90) ArrayList ”Rätsel" 3 ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 1; i <= 5; i++) { list.add(2 * i); // [2, 4, 6, 8, 10] }. § Was gibt dieses Programmsegment aus? for (int i = 0; i < list.size(); i++) { list.add(i, 777); // add 777 at index i } System.out.println(list);. 131.

(91) ArrayList<Type> ist ein neuer Typ § Kann in der Definition anderer Klassen verwendet werden § Kann als Parameter verwendet werden § Kann als Rückgabewert verwendet werden … § Vorsicht bei Veränderungen einer ArrayList. 134.

(92)

Referenzen

ÄHNLICHE DOKUMENTE

§ Programm: Folge von Anweisungen, die von einem Computer ausgeführt werden (können).. § Programm realisiert

§ Wenn wir eine Methode deklarieren dann geben wir an, dass diese Methode einen Parameter braucht. § Wenn wir die Method aufrufen, dann geben wir einen

§ Eine Methode die einen Rückgabewert deklariert muss eine (oder mehrere) return Anweisung(en)

set( index , value ) replaces value at given index with given value size() returns the number of elements in list.. toString() returns a string representation of the list such as

Windows: Rechtsklicken Sie auf die Datei eclipse.exe und wählen Sie Senden an → Desktop (Verknüpfung erstellen).. macOS: Ziehen Sie das Eclipse-Symbol in

§ Wenn eine Methode einen Parameter erwartet dann muss dieser auch übergeben werden. printPunkte(); // ERROR: parameter value

containsAll( coll ) returns true if this set contains every element from given set equals( set ) returns true if given other set contains the same elements iterator() returns

containsAll( coll ) returns true if this set contains every element from given set equals( set ) returns true if given other set contains the same elements iterator() returns