Organisatorisches Vorlesung Donnerstag 8:35 bis 10:05 Übung drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Tutorium (Mehr oder weniger) abwechselnd Mo und Mi 10-11:30 Termine sind in Repetitorium IT I eingetragen. Tutorium entfällt in der ersten Novemberwoche 15.10.2015 IT I - VO 1 1
Übungen: Organisatorisches Diese Woche erste Wissensüberprüfungen in den Übungen. Besprechung von häufigen Fehlern in der VO. 15.10.2015 IT I - VO 1 2
IT I: Heute Wiederholung CuP ctd: this Arrays, ArrayLists Schleifen: for while do-while For-each Projekt Filialenbelieferung 15.10.2015 IT I - VO 1 3
Einige Java-Besonderheiten Strings können mit dem Operator + aneinander gehängt werden. Ausdrücke können über mehrere Zeilen reichen. Eine Zahl wird automatisch in einen String umgewandelt, wenn an dieser Stelle ein String erwartet wird: "0" + value "" + value 15.10.2015 IT I - VO 1 4
Java Konventionen Konventionen dienen der Übersichtlichkeit und Lesbarkeit der Programme. In den Übungen können die Konventionen automatisch geprüft werden. 15.10.2015 IT I - VO 1 5
Java-Konventionen für die Übungen Klassennamen beginnen mit einem Großbuchstaben. Attribut-, Methoden-, Parameternamen und lokale Variablen beginnen mit einem Kleinbuchstaben. Einrückungsstufen (bei Klassendefinitionen, Konstruktoren, Methoden) sind genau vier Leerzeichen. Eine Einrückungsstufe enden mit einer schließenden geschwungenen Klammer }, die nicht mehr eingerückt wird. Alle Attribute sind private. 15.10.2015 IT I - VO 1 6
Dokumentation Für das Verständnis von (fremden) Programmen ist besonders die verbale Beschreibung von Klassen und Methoden wichtig. In Java stehen dafür die Javadoc-Kommentare zur Verfügung. Aus diesen kann automatisch eine Dokumentation des Programms generiert werden. 15.10.2015 IT I - VO 1 7
Syntax von Kommentaren Javadoc: /** * Kommentar */ Weitere Kommentare: /* * Kommentar */ oder einzeilig: /* Kommentar */ // Kommentar 15.10.2015 IT I - VO 1 8
Die Objekt-Referenz this Auf das Objekt, dessen Methode gerade ausgeführt wird, kann mit this zugegriffen werden. In einem Konstruktor bezeichnet this das Objekt, das gerade erzeugt wird. Auf Attribute kann eindeutig mit this.attributname zugegriffen werden. 15.10.2015 IT I - VO 1 9
Die Klasse Random Die Klasse Random stellt verschiedene Methoden zur Erzeugung von Zufallszahlen zur Verfügung. Mit Konstruktor new Random() wird ein Zufallszahlengenerator erstellt. Mit Methoden double nextdouble() int nextint()... werden dann Zufallszahlen erzeugt. 15.10.2015 IT I - VO 1 10
Arrays in Java Arrays sind eine Möglichkeit, um mehrere gleichartige Daten zu verwalten. Ein Array stellt eine Liste fixer Größe dar, wobei die Listenelemente von beliebigem Datentyp sein können. Alle Elemente eines Arrays haben aber denselben Datentyp. Arrays in Java sind eine spezielle Objektart. Bei der Erzeugung eines Array-Objekts wird seine Größe (=Anzahl der Elemente) festgelegt. Zum Programmieren mit Arrays gibt es eine spezielle Notation. 15.10.2015 IT I - VO 1 11
Definition einer Array-Variablen Datentyp[] variablenname; Z.B.: int[] a; Auto[] fuhrpark; Die Elemente eines Arrays können von primitiven oder nicht-primitiven Datentyp sein. Bei einem nicht-primitiven Datentyp sind die Elemente des Arrays nicht die Objekte selbst, sondern Objekt-Referenzen. 15.10.2015 IT I - VO 1 12
Erzeugen eines Array-Objekts new Datentyp[Größe] Z.B.: int[] zahlenliste; zahlenliste = new int[24]; int n = 100; Auto[] fuhrpark = new Auto[n]; Der Aufruf des Konstruktors erzeugt ein Array-Objekt der angegebenen Größe mit dem angegebenen Datentyp. Die Elemente des Arrays werden mit Default-Werten initialisiert: Objekt-Referenzen werden auf null gesetzt. int-, long-, double-werte werden auf 0 gesetzt. boolean-werte werden auf false gesetzt. 15.10.2015 IT I - VO 1 13
Zugriff auf ein Array-Objekt Auf die Elemente eines Arrays kann mit Hilfe ihrer Nummer zu gegriffen werden: int[] a = new int[10]; a[5] = 13; a[6] = 2*a[5]; In Java sind die Array-Elemente mit 0 beginnend nummeriert, also 0,1,2, Auf die Größe eines Arrays kann mit <Array-Variable>.length zugegriffen werden (z.b. a.length). Das letzte Element eines Arrays a hat also den Index (a.length - 1). 15.10.2015 IT I - VO 1 14
Dynamische Arrays: Die Klasse ArrayList Die Klasse ArrayList aus java.util kann im wesentlichen wie ein Array verwendet werden (allerdings mit einer anderen Syntax). Im Gegensatz zu Arrays ist die Größe einer ArrayList aber nicht im vorhinein festgelegt, sondern es können beliebig Elemente in die Liste eingefügt und aus der Liste entfernt werden. Die Größe der Liste verändert sich dabei automatisch. Weiters stellt die Klasse ArrayList zusätzliche Methoden zur Verfügung. 15.10.2015 IT I - VO 1 15
Verwendung einer ArrayList (1) Definition eines ArrayList-Datentyps: ArrayList<Auto> fuhrpark; Eine ArrayList kann für jeden nicht-primitiven Datentyp definiert werden. Erzeugen einer ArrayList: new ArrayList<Auto>(); Eine neu erzeugte ArrayList ist leer, sie enthält keine Elemente. 15.10.2015 IT I - VO 1 16
Verwendung einer ArrayList (2) Das Elemente an der Stelle i in einer ArrayList erhält man von der Methode get(i): fuhrpark.get(i); Auch in einer ArrayList sind die Elemente mit 0 beginnend nummeriert, also 0,1,2, Die Größe einer ArrayList erhält man durch die Methode size(): fuhrpark.size() Mit der Methode set(i,element) kann ein Element an die Stelle i geschrieben werden: fuhrpark.set(i,auto1); Die Stelle i muss es in der ArrayList geben, d.h. i < size(). 15.10.2015 IT I - VO 1 17
Verwendung einer ArrayList (3) Zusätzliche Elemente können mit der Methode add(element) am Ende der ArrayList angefügt werden: furhpark.add(auto2); Mit der Methode add(i,element) kann ein zusätzliches Element an der Stelle i in die ArrayList eingefügt werden: furhpark.add(i,auto3); Dabei werden die ursprünglichen Elemente ab der Stelle i um eine Stelle nach hinten verschoben, damit Platz für das zusätzliche Element geschaffen wird. Mit der Methode remove(i) kann das Element an der Stelle i aus der ArrayList entfernt werden: furhpark.remove(i); Die Elemente ab Stelle i+1 werden um eine Stelle nach vorne verschoben, damit die Lücke geschlossen wird. 15.10.2015 IT I - VO 1 18
Iteration und Schleifen Schleifen erlauben die kontrollierte Wiederholung von Anweisungen/Aktionen. Diese schnelle Wiederholung ist eine der wesentlichen Stärken von Computern. Arrays und Schleifen Mit Hilfe einer Schleife können dieselben Aktionen für alle (oder ausgewählte) Elemente eines Arrays durchgeführt werden. 15.10.2015 IT I - VO 1 19
Die for-each Schleife (1) Als sehr einfache Form der Schleife gibt es in Java die for-each Schleife. Damit können Aktionen für alle Elemente eines Arrays/einer ArrayList ausgeführt werden. 15.10.2015 IT I - VO 1 20
Die for-each Schleife (2) Für ein Array Datentyp[] liste; oder eine ArrayList ArrayList<Datentyp> liste; führt die for-each Schleife for(datentyp el : liste) { Schleifenrumpf } den Schleifenrumpf für jedes Element des Arrays aus. Auf das jeweilige Element kann über die lokale Variable el zugegriffen werden. Der Name der Laufvariablen (hier el) kann frei gewählt werden. Die Laufvariable nimmt der Reihe nach alle im Array enthaltenen Werte an. 15.10.2015 IT I - VO 1 21
Eine for-schleife Die for Schleife for(initialisierung;fortsetzungsbedingung; Aktualisierung) { Schleifenrumpf } wird ausgeführt, solange die Fortsetzungsbedingung true gibt. Eine for-schleife wird meist verwendet, wenn vor der Schleife klar ist, wie oft diese durchlaufen werden soll, z.b. for(int i=0; i<liste.size(); i++) {... liste.get(i)... } for(int i=0; i<array.length; i++) {... array[i]... } 15.10.2015 IT I - VO 1 22
Die while-schleife in Java while(bedingung) { Anweisungsblock } Die Bedingung ist ein Ausdruck, der true oder false liefert. Der Anweisungsblock der while-schleife wird ausgeführt, wenn vor Ausführung des Anweisungsblocks die <Bedingung> true liefert. Nach Ende des Anweisungsblocks wird die <Bedingung> erneut überprüft, und der Anweisungsblock nochmals ausgeführt, wenn die Bedingung true ist. Das wiederholt sich, bis die Bedingung false ist. 15.10.2015 IT I - VO 1 23
Die do-while-schleife in do{ Anweisungsblock }while(bedingung) Java Funktionsweise wie while-schleife. Läuft aber mindestens einmal durch, weil Überprüfung erst am Ende. 15.10.2015 IT I - VO 1 24