Übersicht Schleifen Schleifeninvarianten Referenztypen, Wrapperklassen und API CoMa I WS 08/09 1/15
CoMa I Programmierziele Linux bedienen Code umschreiben strukturierte Datentypen Anweisungen und Kontrollstrukturen Methoden Scope Arrays Klassen Interfaces Vererbung CoMa I WS 08/09 2/15
Ansagen HA 4 Fehler in Aufgabe 10 b muss sein: fvalue = 2. ; Pseudocode: in FOR-Schleifen kein expliziter Inkrement notwendig bei Schrittweite 1 Relevanz für HA-Korrektur, sprecht ggf. die Tutoren an Test am 09. Dezember zwischen 14 und 16 Uhr Mittwoch, 11. November, zwischen 14 und 16 Uhr Nachhilfe-RB im Unixpool im Ostsaal an der Empore Wer keine Probleme hat mit OAs und RBs, hat frei Wer kommt auf keinen Fall? CoMa I WS 08/09 3/15
Schleifen in JAVA ihr kennt initialization ; while ( condition ) {... ; increment ; } Steuermechanismus: initialization ; do {... ; increment ; } while ( condition ) ; initialization: die Steuervariable erstmals setzen condition: die Steuervariable überprüfen increment: die Steuervariable verändern. November 2009 CoMa I WS 08/09 4/15
Die for -Schleife while, do reichen aus, um alle iterativen Algorithmen zu beschreiben Nachteil: Steuermechanismus ist verteilt Übersicht nicht immer leicht dazu gibt es for ( initialization ; condition ; increment ) {... ; } Vorteil: Steuermechanismus steht zusammen man erkennt Funktion der Schleife mit einem Blick CoMa I WS 08/09 5/15
Die for -Schleife Vergleich der Schreibweisen: int sum = 0 ; int prod = 1 ; int k = 1 ; int sum = 0 ; int prod = 1 ; while ( k <= n ) { sum += k; prod *= k; k++ ; } for ( int k = 1 ; k <= n ; k++ ) { sum += k; prod *= k; }. November 2009 CoMa I WS 08/09 6/15
Die for -Schleife jeder der Steuerteile darf auch leer sein, z.b.: int n = Integer.parseInt( "2" ); if ( n < 1 ) System.out.println( " eingegebene Zahl muss >= 1 sein!"); else for ( ; n >= 1 ; n ) {... } for ( ; ; ) entspricht while ( true ) echte Endlosschleife. November 2009 CoMa I WS 08/09 7/15
Schleifeninvarianten Schleifeninvarianten: Sind Eigenschaften von Schleifen, die zu einem bestimmten Punkt bei jedem Durchlauf der Schleife gültig sind, auch unabhängig von der Anzahl der bisherigen Durchläufe. typischerweise Wertebereiche von Variablen oder Beziehungen zwischen Variablen (x y). Dienen auch zum Beweis der Korrektheit von Algorithmen. CoMa I WS 08/09 8/15
Algorithmus Maximum Ziel: Bestimme maximalen Eintrag eines Vektors max( x ) Input: x R n Output: max n i=1 x i max:= FOR i := 1 TO n (STEP 1) DO IF x i > max THEN max:=x i ENDIF ENDFOR RETURN max max( x ) Input: x R n Output:max n i=1 x i max:= i := 1 WHILE i n DO IF x i > max THEN max:=x i ENDIF i:=i + 1 ENDWHILE RETURN max CoMa I WS 08/09 9/15
Arbeitet Algo korrekt? Variable max muss nach Ende des Algos den Wert max{x 1,...,x n } haben betrachte den Wert der Variablen am Ende max am Ende eines Schleifendurchlaufs formal: sei max(i) der Wert der Variablen max am Ende der i-ten Iteration Invarianten: max(i) x i max(i) max(i + 1) max(i) = max{x 1,...,x i } CoMa I WS 08/09 10/15
Schleifeninvariante mit vollständiger Induktion IA: i = 1 x 1 = max(1) = max{x 1 } = x 1 IV: Für beliebiges aber festes i 1 gilt max(i) = max{x 1,..., x i } IS: i i + 1 max(i + 1) Algo = max{max(i), x i+1 } IV = max{max{x 1,...,x i }, x i+1 } Wissen = max{x 1,...,x i+1 } CoMa I WS 08/09 11/15
Referenztypen, Wrapperklassen und API verschiedene Klassen schon gesehen: TextField, Integer, String, Applet, (Primzahl,)... Welche verschiedenen Klassen gibt es überhaupt? http://java.sun.com/javase/6/docs/api/ API = Application Programming Interface Einführung anhand der Klassen String, Integer und Point E-Kreide. November 2009 CoMa I WS 08/09 12/15
import Anweisung Klassen der API in Paketen verwaltet benutzen mittels import Anweisung z. B. import java.awt.*; automatisch importiert wird java.lang.* Integer Double Math String... Achtung: kein rekursiver Import von Sub-Paketen fehlende Details später CoMa I WS 08/09 13/15
Modifier static Globale Variablen / Datenfelder ohne static nennt man Instanzvariablen oder Objektvariablen, ihre Werte hängen von der Instanz ab Zugriff über getter und setter Methoden (Konvention) Globale Variablen / Datenfelder mit static nennt man Klassenvariablen, sind instanzunabhängig, Beispiele: Math.PI static double, Integer.MAX_VALUE static int Variablen Methoden non-static Instanzvariablen Instanzmethoden static Klassenvariablen Klassenmethoden CoMa I WS 08/09 14/15
Klassenmethoden versus Instanzmethoden int ivalue = Integer.parseInt(); Deklaration: public static int parseint(string s) int ivalue = Math.round(25.5f); Deklaration: public static int round(float a) String str = Hallo! ; int length = str.length(); Deklaration: public int length() CoMa I WS 08/09 15/15