Übungen Informatik I JAVA - Methoden - Rekursion http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 1
Methoden Methoden sind eine Zusammenfassung von Deklarationen und Anweisungen Methoden haben einen Namen und können unter diesem aufgerufen werden Syntax einer Methode: Modifikator - Return-Typ Name Parameter public static void hallo () return-type method-name (param-type1 param-name1,..., param-typen param-namen ){ // code Methodenaufruf: method-name (param1,..., paramn); Übungen Informatik 1 2
Methoden Zugriffsrechte Klassen, Attribute und Methoden können Zugriffsrechte erhalten. public: öffentliche Methode, d.h, die Mehtode kann in anderen Klassen verwendet werden. public static String hallo() private: Methode ist nur in der eigenen Klasse sichtbar und kann nur dort verwendet werden. private static String hallo() final, protected : relevant bei Vererbung kommt im 2. Semester final static String hallo() protected static String hallo() ohne Modifikatoren: Methode ist nur in der eigenen Klasse und im eigenen Paket sichtbar (package public) static: Klassenmethode, d.h. sie kann aufgerufen werden, ohne eine Instanz der Klasse erzeugen zu müssen, Die Methode gehört also zu einer Klasse und nicht zu einem Objekt static String hallo() void: die Methode liefert keinen Wert zurück public static void hallo() Übungen Informatik 1 3
Methoden formale Parameter Methoden können Werte als Parameter übernehmen. Parameter werden in der Deklaration als formale Parameter in runden Klammern festgelegt. - jeder formale Parameter muss separat als Variable mit Typ und Bezeichnung deklariert werden - formale Parameter sind innerhalb der Methode lokale Variablen static boolean gueltigesjahr (int minmumjahr, double maximumjahr) { if (minimumjahr>=1500 && maximumjahr<=2004) { return true; else { return false; Die Methode gueltigesjahr arbeitet mit dem integer-wert minimumjahr und dem double-wert maximumjahr minimumjahr und maximumjahr sind formale Parameter. Die Methode gueltigesjahr liefert einen boolschen Wert (Typ der Methode) zurück Das erfordert eine Zuweisung in der return-anweisung der Methode. der Rückgabewert der Methode steht hinter der return-anweisung gueltigesjahr (2,1800)? IO.print( ok ):IO.print( nein ); Übungen Informatik 1 4
Methoden Regeln Zusammenfassung Methoden müssen innerhalb einer Klasse definiert werden Eine Methode kann an beliebiger Stelle mit Hilfe der Anweisung return verlassen werden. Ist keine return-anweisung vorhanden, wird die Methode an der schließenden geschweiften Klammer verlassen. Liefert die Methode einen Wert zurück, wird return-anweisung nötig. Rückgabewert: hinter der return-anweisung. Argumente einer Methode stehen in der in Parameterliste (Variablendeklaration mit Typ und Name - für jeden Parameter). Hat die Methode keine Parameter, ist die Parameterliste leer Wird ein Teil eines Programmes mehr als einmal gebraucht, so ist dieser Programmteil als Methode auszulagern! (kein copy paste!) Übungen Informatik 1 5
Methoden Mathematische Berechnungen Klasse java.lang.math s. API: für Mathematische Berechnungen, für die kein Operator zur Verfügung steht z.b.: - Potenzrechnung - Bestimmung von Minimum und Maximum - Winkelfunktion - Quadratwurzelberechnung Übungen Informatik 1 6
Methoden mathematische Berechnung public class mathmethoden { static double kreisflaeche(int radius) { double flaeche; return flaeche = Math.pow(radius, 2) * Math.PI; public static void main(string[] args) { double wurzel2; System.out.println("Kreisfläche mit radius 10 = " + kreisflaeche(10)); System.out.println(Math.min( 300, kreisflaeche(100) )); wurzel2 = Math.sqrt(2); System.out.println( "Wurzel von 2 = " + wurzel2); System.out.println( "Wurzel von 2 (abgeschn.) = " + Math.floor(wurzel2)); verwendete Methoden: Math.pow Quadrat des Radius (Math.pow(a,b) = a hoch b) Math.max,Math.min Maximum, Minimum von 2 Zahlen bestimmen Math.abs Absolutwert (ohne Vorzeichen) einer Zahl Math.sqrt Quadratwurzel Math.floor schneidet die Nachkommastellen ab. Math.PI gibt den Wert von PI = 3.141592653589793 zurück Übungen Informatik 1 7
Rekursion Ein Objekt heißt rekursiv, wenn es sich selbst als Teil enthält. Rekursion ist ein alltägliches Phänomen: - Rückkopplung Mikrofon/Lautsprecher - Blick mit einem Spiegel in den Spiegel Übungen Informatik 1 8
Rekursion Beispiel: Eine kleine Wunsch-Funktion Auf dem Weg durch den Wald begegnet uns eine Fee. Sie spricht zu uns:»du hast drei Wünsche frei«. static void fee() { wunsch(); wunsch(); fee(); Durch den dauernden Aufruf der fee()-funktion haben wir unendlich viele Wünsche frei. Rekursion ist also das Aufrufen der eigenen Methode, in der wir uns befinden. direkte Rekursion Dies kann auch über einen Umweg funktionieren. indirekte Rekursion. Übungen Informatik 1 9
Abbruchbedingung einer Rekursion Eine Endlos-Rekursion: static void runter( int n ) { System.out.print( n + ", " ); runter( n - 1 ); Aufruf von runter(10) folgende Ausgabe: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2,... Rekursion ist prinzipiell etwas Unendliches. Abhilfe: 1. Abbruchbedingung wie bei Schleifen 2. und dann keinen Rekursionsaufruf mehr starten. Die Abbruchbedingung einer Rekursion static void runter( int n ) { if ( n == 0 ) // Rekursionsende return; System.out.print( n + ", " ); runter( n - 1 ); Die runter()-methode ruft jetzt nur noch so lange runter(n-1) auf, wie n ungleich Null ist. Übungen Informatik 1 10
Unterschiedliche Rekursionsformen Rekursionen, bei denen hinter dem Methodenaufruf keine Anweisungen stehen heißen Endrekursion. static void runter1( int n ){ if ( n == 0 ) // Rekursionsende return; System.out.print( n + ", " ); runter1( n - 1 ); Ausgabe von runter1(10) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 Rekursionen, bei denen hinter dem Methodenaufruf Anweisungen stehen (schwieriger zu verstehen): static void runter2( int n ){ if ( n == 0 ) // Rekursionsende return; runter2( n - 1 ); System.out.print( n + ", " ); runter1() gibt zuerst die Zahl n aus und ruft anschließend rekursiv runter1() auf. runter2() steigt jedoch erst immer tiefer ab, und die Rekursion muß beendet sein, bis es zum ersten print() kommt. Ausgabe von runter2(10) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, Der Trick bei der Sache ist nun darin zu sehen, dass jede Methode ihre eigene lokale Variable besitzt. Übungen Informatik 1 11
Rekursion Ausblick Ausblick Der niederländische Maler Maurits Cornelis Escher (1898-1972) machte die Rekursion auch in Bildern berühmt. Seiten mit Bildern und Vita finden sich zum Beispiel unter folgenden Webadressen: http://www.worldofescher.com/ http://www.etropolis.com/escher/ http://www.iproject.com/escher/escher100.html Übungen Informatik 1 12