Javakurs 12: Methoden

Ähnliche Dokumente
Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Arrays und Schleifen

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Arrays und Schleifen

2. Unterprogramme und Methoden

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Schleifen und Arrays Javakurs

Methoden und Wrapperklassen

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

Einführung in die Programmierung

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Einführung Pointer. C-Kurs 2013, 2. Vorlesung. Nico Andy

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

6 Speicherorganisation

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Vorkurs Informatik WiSe 16/17

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Repetitorium Informatik (Java)

Java Einführung Methoden. Kapitel 6

Grundlagen der Objektorientierten Programmierung - Methoden -

Vorlesung Programmieren

Erste Java-Programme (Scopes und Rekursion)

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

Einführung in Java. Arne Hüffmeier. Angelehnt an Java-Vorkurs der Freitagsrunde. Methoden implementieren. Michelle Liebers, Dennis Hoffmann

Programmierung und Angewandte Mathematik

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Martin Unold INFORMATIK. Geoinformatik und Vermessung

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Objektorientierung (OO)

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Anweisungen zur Ablaufsteuerung

Vorkurs Informatik WiSe 17/18

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Programmieren in Java

Programmieren I. Kapitel 12. Referenzen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

6 Speicherorganisation

Informatik II. Woche 10, Giuseppe Accaputo

Algorithmen und Datenstrukturen II

Java Übung. Übung Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Werner Gaulke.

Teil 2: Weitere Aspekte der Objektorientierung

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

pue13 January 28, 2017

Tag 7 Repetitorium Informatik (Java)

Implementieren von Klassen

Tag 8 Repetitorium Informatik (Java)

Dynamischer Speicher

Javakurs für Anfänger

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

Einstieg in die Informatik mit Java

EINFÜHRUNG IN DIE PROGRAMMIERUNG

JAVA für Nichtinformatiker - Probeklausur -

Kapitel 4: Anweisungen und Kontrollstrukturen

Kapitel 10. Verweise und Referenzen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Methoden und Funktionen

Methoden, JavaAPI, Namensgebung, Testen, Debuggen

Elementare Konzepte von

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Philipp Güttler Objektorientierung und komplexe Datentypen

Modellierung und Programmierung 1

Algorithmen und Datenstrukturen

2. Programmierung in C

Praktische Informatik 1

Klassenvariablen, Klassenmethoden

Javakurs für Anfänger

Arten von Klassen-Beziehungen

Listing 1: Cowboy. Listing 2: Woody

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Systemnahe Programmierung in C (SPiC)

Programmierkurs. Manfred Jackel

JAVA 04: Funktionen, Parameter und globale und lokale Variablen.

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Einstieg in die Informatik mit Java

Java Kurs für Anfänger Einheit 5 Methoden

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1

JAVA - Methoden - Rekursion

Arrays und Schleifen. Tim

Hello World. 1. Vorlesung, Javakurs März 2010

Standardkonstrukte in Java

Einführung in die Programmierung für NF. Übung

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Primitive Datentypen, Eingaben, Kontrollstrukturen und Methodendeklaration

Computeranwendung und Programmierung (CuP)

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Grundlagen der Programmierung

Transkript:

Javakurs 12: Methoden Johannes Heinemann basierend auf der Vorlage von Mario Bodemann und Sebastian Dyroff Sadik Hasanovic Technische Universität Berlin 6. März 2012 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 1 / 56

Inhaltsverzeichnis 1 Methoden Was sind Methoden? Methoden mit Rückgabe Bauanleitung Beispiele Beliebte Fehler Methoden ohne Rückgabe Bauanleitung Beispiele 2 Variablen in Methoden Scopes lokale Variablen Call by Value 3 Rekursion Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 2 / 56

Inhaltsverzeichnis Methoden 1 Methoden Was sind Methoden? Methoden mit Rückgabe Bauanleitung Beispiele Beliebte Fehler Methoden ohne Rückgabe Bauanleitung Beispiele 2 Variablen in Methoden Scopes lokale Variablen Call by Value 3 Rekursion Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 3 / 56

Methoden Was sind Methoden? Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 4 / 56

Methoden Was sind Methoden? Was sind Methoden? Eine Methode ist eine Aufforderung etwas zu tun. 1 1 xkcd. http://xkcd.com/149/ Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 5 / 56

Methoden Was sind Methoden? Was sind Methoden? Eine Methode ist eine Aufforderung etwas zu tun. Im Leben könnte das zum Beispiel so aussehen: 1 1 xkcd. http://xkcd.com/149/ Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 5 / 56

Methoden Was sind Methoden? Was sind Methoden? Eine Methode ist eine Aufforderung etwas zu tun. Im Leben könnte das zum Beispiel so aussehen: Aufforderung: Make me a Sandwich! 1 1 xkcd. http://xkcd.com/149/ Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 5 / 56

Methoden Was sind Methoden? Was sind Methoden? Eine Methode ist eine Aufforderung etwas zu tun. Im Leben könnte das zum Beispiel so aussehen: Aufforderung: Make me a Sandwich! Ergebnis: Sandwich 1 1 xkcd. http://xkcd.com/149/ Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 5 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 6 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Bauanleitung Methoden <Ergebnistyp> <Name> (<ParameterListe>){ // do something return something; } Parameterliste <Typ 1 > <Name 1 >,..., <Typ n > <Name n > Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 7 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Bauanleitung Wie sieht unser voriges Beispiel in Java aus? Listing 1: 1 p u b l i c Sandwich makesandwich ( ) { 2 Salad s a l a d = g e t S a l a d ( ) ; 3 Mustard mustard = getmustard ( ) ; 4 Bread bread = getbread ( ) ; 5 Sandwich sandwich = 6 puttogether ( bread, mustard, s a l a d ) ; 7 r e t u r n sandwich ; 8 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 8 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Bauanleitung Wie sehen Methoden in Java aus? Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 9 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Bauanleitung Wie sehen Methoden in Java aus? Mit einem Parameter: Listing 3: 1 p u b l i c s t a t i c f l o a t k r e i s F l a e c h e ( f l o a t r a d i u s ) { 2 r e t u r n r a d i u s r a d i u s 3,1416F ; 3 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 9 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Bauanleitung Wie sehen Methoden in Java aus? Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 10 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Bauanleitung Wie sehen Methoden in Java aus? Mit mehreren Parametern und geschachtelt: Listing 5: 1 p u b l i c s t a t i c f l o a t z y l i n d e r V o l u m e n ( f l o a t hoehe, f l o a t r a d i u s ) { 2 r e t u r n hoehe k r e i s F l a e c h e ( r a d i u s ) ; 3 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 10 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beispiel Listing 6: src/mymath.java 1 p u b l i c c l a s s MyMath { 2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 i n t fakfour = f a c t o r i a l ( 4 ) ; 4 System. out. p r i n t l n ( 4! = + fakfour ) ; 5 } 6 p u b l i c s t a t i c i n t f a c t o r i a l ( i n t z a h l ) { 7 i n t r e s u l t = 1 ; 8 f o r ( i n t i =1 ; i<=z a h l ; i ++) { 9 r e s u l t = r e s u l t i ; 10 } 11 r e t u r n r e s u l t ; 12 } 13 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 11 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beispiel Was sollt ihr aus dem Beispiel mitnehmen? Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 12 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beispiel Was sollt ihr aus dem Beispiel mitnehmen? Gründe für die Deklaration von Methoden: 1 Wiederkehrende Programmteile müssen nicht immer wieder programmiert werden! 2 Bei Umfangreichen Programmen können einzelne Teile in Methoden zusammengefasst werden, um das Programm übersichtlicher zu gestalten! Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 12 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beliebte Fehler Listing 7: src/foo.java 1 p u b l i c s t a t i c i n t foo ( i n t z a h l ) { 2 i n t i = 1 ; 3 r e t u r n i ; 4 i = i + z a h l ; // Unreachable code! 5 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 13 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beliebte Fehler Richtig wäre: Listing 8: src/foo.java 1 p u b l i c s t a t i c i n t foo ( i n t z a h l ) { 2 i n t i = 1 ; 3 i = i + z a h l ; // Reachable code! 4 r e t u r n i ; 5 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 14 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beliebte Fehler Wo ist der Fehler? Listing 9: src/evenorodd.java 1 p u b l i c s t a t i c boolean i s E v e n ( i n t d ) { 2 // C o m p i l e r f e h l e r 3 i f ( d%2 == 0 ) { 4 r e t u r n t r u e ; 5 } e l s e { 6 r e t u r n f a l s e ; 7 } 8 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 15 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beliebte Fehler Fehlerausgabe: EvenOrOdd.java:4: incompatible types found : java.lang.string required: boolean return "true"; ^ EvenOrOdd.java:6: incompatible types found : java.lang.string required: boolean return "false"; ^ 2 errors Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 16 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beliebte Fehler Richtig wäre: Listing 10: src/evenorodd.java 1 p u b l i c s t a t i c boolean i s E v e n ( i n t d ) { 2 3 i f ( d%2 == 0 ) { 4 r e t u r n t r u e ; 5 } e l s e { 6 r e t u r n f a l s e ; 7 } 8 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 17 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beliebte Fehler Wo ist der Fehler? Listing 11: src/posorneg.java 1 p u b l i c s t a t i c S t r i n g posorneg ( i n t d ) { 2 // C o m p i l e r f e h l e r 3 i f ( d >= 0 ) { 4 r e t u r n pos ; 5 } 6 i f ( d < 0 ) { 7 r e t u r n neg ; 8 } 9 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 18 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beliebte Fehler Fehlerausgabe: PosOrNeg.java:9: missing return statement } ^ 1 error Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 19 / 56

Methoden Methoden mit Rückgabe Methoden mit Rückgabe - Beliebte Fehler Richtig wäre: Listing 12: src/posorneg.java 1 p u b l i c s t a t i c S t r i n g posorneg ( i n t d ) { 2 i f ( d >= 0 ) { 3 r e t u r n pos ; 4 } 5 i f ( d < 0 ) { 6 r e t u r n neg ; 7 } 8 r e t u r n k e i n e s von b e i d e n ; 9 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 20 / 56

Methoden Methoden ohne Rückgabe Methoden ohne Rückgabe Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 21 / 56

Methoden Methoden ohne Rückgabe Methoden ohne Rückgabe - Bauanleitung Methoden void <Name> (<ParameterListe>){ // do something } Parameterliste <Typ 1 > <Name 1 >,..., <Typ n > <Name n > Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 22 / 56

Methoden Methoden ohne Rückgabe Methoden ohne Rückgabe - Beispiele Wie sieht das in Java aus? Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 23 / 56

Methoden Methoden ohne Rückgabe Methoden ohne Rückgabe - Beispiele Wie sieht das in Java aus? Ein altbekanntes Beispiel ohne Parameter: Listing 14: src/helloworld.java 1 p u b l i c c l a s s HelloWorld { 2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 h e l l o W o r l d ( ) ; 4 } 5 p u b l i c s t a t i c v o i d h e l l o W o r l d ( ) { 6 System. out. p r i n t l n ( H e l l o World! ) ; 7 } 8 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 23 / 56

Methoden Methoden ohne Rückgabe Methoden ohne Rückgabe - Beispiele Ein einfaches Beispiel mit Parametern: Listing 15: src/printmax.java 1 p u b l i c c l a s s Max{ 2 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { 3 printmax ( 1, 2 ) ; 4 } 5 p u b l i c s t a t i c v o i d printmax ( i n t a, i n t b ) { 6 i f ( a > b ) { 7 System. out. p r i n t l n ( a ) ; 8 } e l s e { 9 System. out. p r i n t l n ( b ) ; 10 } 11 } 12 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 24 / 56

Methoden Methoden ohne Rückgabe Methoden ohne Rückgabe - Beispiele Listing 16: src/main.java 1 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 2 System. out. p r i n t l n ( H e l l o World! ) ; 3 } Die statische Methode liefert keine Rückgabe, daher ist der Rückgabetyp void. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 25 / 56

Methoden Methoden ohne Rückgabe Methoden ohne Rückgabe - Beispiele Listing 17: src/main.java 1 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 2 System. out. p r i n t l n ( H e l l o World! ) ; 3 } Die statische Methode liefert keine Rückgabe, daher ist der Rückgabetyp void. Der Methodenname ist main. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 25 / 56

Methoden Methoden ohne Rückgabe Methoden ohne Rückgabe - Beispiele Listing 18: src/main.java 1 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 2 System. out. p r i n t l n ( H e l l o World! ) ; 3 } Die statische Methode liefert keine Rückgabe, daher ist der Rückgabetyp void. Der Methodenname ist main. Die Parameterliste ist String[] args. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 25 / 56

Methoden Methoden ohne Rückgabe Methoden ohne Rückgabe - Beispiele Listing 19: src/main.java 1 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 2 System. out. p r i n t l n ( H e l l o World! ) ; 3 } Die statische Methode liefert keine Rückgabe, daher ist der Rückgabetyp void. Der Methodenname ist main. Die Parameterliste ist String[] args. Der Rumpf besteht nur aus der Bildschirmausgabe. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 25 / 56

Zusammenfassung Methoden Methoden ohne Rückgabe Methoden <Ergebnistyp> <Name> (<ParameterListe>){ // do something return something; } Methoden Ohne Rückgabe Mit Rückgabe ohne Parameter helloworld() makesandwich() mit Parameter printmax( a,b ) kreisflaeche( f ) Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 26 / 56

Methoden Methoden ohne Rückgabe Noch Fragen? Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 27 / 56

Methoden Methoden ohne Rückgabe... dann eine kurze Pause! Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 28 / 56

Variablen in Methoden Inhaltsverzeichnis 1 Methoden Was sind Methoden? Methoden mit Rückgabe Bauanleitung Beispiele Beliebte Fehler Methoden ohne Rückgabe Bauanleitung Beispiele 2 Variablen in Methoden Scopes lokale Variablen Call by Value 3 Rekursion Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 29 / 56

Variablen in Methoden Variablen in Methoden Scopes Der Befehl 1 i n t i = 4 ; Listing 20: führt genau genommen 2 Befehle aus: Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 30 / 56

Variablen in Methoden Variablen in Methoden Scopes Der Befehl 1 i n t i = 4 ; Listing 22: führt genau genommen 2 Befehle aus: 1 i n t i ; 2 i = 4 ; Listing 23: Zuerst wird die Variable deklariert, danach initialisiert. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 30 / 56

Variablen in Methoden Variablen in Methoden Scopes Deklaration: Es wird Speicher angefordert. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 31 / 56

Variablen in Methoden Variablen in Methoden Scopes Deklaration: Es wird Speicher angefordert. Initialisierung: Wir weisen der Variable einen Wert zu. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 31 / 56

Scope Variablen in Methoden Scopes Scope Der Scope definiert den Sichtbarkeitsbereich einer Variablen. Eine Variable ist nur dort sichtbar, wo sie deklariert wurde. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 32 / 56

Scope: Beispiel Variablen in Methoden Scopes Listing 24: src/scope.java 1 p u b l i c c l a s s Scope { 2 3 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { 4 i n t z a h l ; 5 z a h l = 5 ; 6 z e i g e Z a h l ( ) ; 7 } 8 9 p u b l i c s t a t i c v o i d z e i g e Z a h l ( ) { 10 System. out. p r i n t l n ( z a h l ) ; 11 } 12 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 33 / 56

Scope: Beispiel Variablen in Methoden Scopes Ausgabe Scope.java:10: cannot find symbol symbol : variable zahl location: class Scope System.out.println(zahl); ^ 1 error Die Variable int zahl wurde in der main-methode deklariert und ist nur in dieser sichbar, nicht aber in der Methode zeigezahl (). Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 34 / 56

Variablen in Methoden Scope: Beispiel 2 Scopes Listing 25: src/scope2.java 1 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { 2 i n t e r g e b n i s = a d d i e r e (8, s u b t r a h i e r e ( 3, 4 ) ) ; 3 System. out. p r i n t l n ( e r g e b n i s ) ; 4 } 5 p u b l i c s t a t i c i n t a d d i e r e ( i n t x, i n t y ) { 6 i n t e r g e b n i s = x+y ; 7 r e t u r n e r g e b n i s ; 8 } 9 p u b l i c s t a t i c i n t s u b t r a h i e r e ( i n t x, i n t y ) { 10 i n t e r g e b n i s = x y ; 11 r e t u r n e r g e b n i s ; 12 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 35 / 56

Scope: Beispiel Variablen in Methoden Scopes Die Variable int ergebnis wurde insgesamt drei mal deklariert. Ist das nicht falsch? Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 36 / 56

Scope: Beispiel Variablen in Methoden Scopes Die Variable int ergebnis wurde insgesamt drei mal deklariert. Ist das nicht falsch? Nein. Jede Deklaration erfolgt in einer anderen Methode, deshalb hat jede Variable ihren eigenen Scope. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 36 / 56

lokale Variablen Variablen in Methoden lokale Variablen Manchmal möchte man Variablen haben, auf die man in jeder Methode zugreifen kann. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 37 / 56

lokale Variablen Variablen in Methoden lokale Variablen Manchmal möchte man Variablen haben, auf die man in jeder Methode zugreifen kann. Lösung: Klassenvariablen Eine Variable, die innerhalb der Klasse deklariert wird, ist in allen Methoden der Klasse sichtbar. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 37 / 56

lokale Variablen Variablen in Methoden lokale Variablen Listing 26: src/locals.java 1 p u b l i c c l a s s L o c a l s { 2 3 i n t x = 8 ; 4 5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { 6 //... 7 } 8 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 38 / 56

Variablen in Methoden lokale Variablen lokale und globale Variablen Listing 27: src/variables.java 1 p u b l i c c l a s s V a r i a b l e s { 2 3 i n t z a h l = 7 ; 4 5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { 6 i n t b = foo ( 3 ) ; 7 System. out. p r i n t l n ( b ) ; 8 } 9 p u b l i c s t a t i c i n t foo ( i n t x ) { 10 i n t z a h l = x x ; 11 r e t u r n z a h l ; 12 } 13 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 39 / 56

Verschattung Variablen in Methoden lokale Variablen Verschattung Wird eine Variable lokal deklariert, so wird die gleichnamige Klassenvariable verschattet, d.h. sie ist innerhalb der Methode temporär nicht sichtbar. Dies gilt auch für Variablen aus Parameterlisten. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 40 / 56

Variablen in Methoden lokale Variablen lokale und globale Variablen Listing 28: src/variables2.java 1 p u b l i c c l a s s V a r i a b l e s 2 { 2 3 i n t z a h l = 7 ; 4 5 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { 6 i n t b = foo ( 3 ) ; 7 System. out. p r i n t l n ( b ) ; 8 } 9 p u b l i c s t a t i c i n t foo ( i n t z a h l ) { 10 r e t u r n z a h l z a h l ; 11 } 12 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 41 / 56

Call by Value Variablen in Methoden Call by Value Wie werden Parameterwerte übergeben? Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 42 / 56

Call by Value Variablen in Methoden Call by Value Listing 29: src/doublenumber.java 1 p u b l i c c l a s s DoubleNumber{ 2 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { 3 i n t i = 3 ; 4 r e d o u b l e ( i ) ; 5 System. out. p r i n t l n ( i ) ; 6 } 7 p u b l i c s t a t i c v o i d r e d o u b l e ( i n t i ) { 8 i = i 2 ; 9 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 43 / 56

Call by Value Variablen in Methoden Call by Value Ausgabe: 3 Der Wert wurde nicht verdoppelt. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 44 / 56

Variablen in Methoden Primitive Datentypen Call by Value main() Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 45 / 56

Variablen in Methoden Primitive Datentypen Call by Value main() int i = 3; 3 i Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 45 / 56

Variablen in Methoden Primitive Datentypen Call by Value main() int i = 3; redouble(i); 3 i Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 45 / 56

Variablen in Methoden Primitive Datentypen Call by Value main() void redouble(int i) int i = 3; redouble(i); 3 i Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 45 / 56

Variablen in Methoden Primitive Datentypen Call by Value main() void redouble(int i) int i = 3; redouble(i); 3 i copy 3 i Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 45 / 56

Variablen in Methoden Primitive Datentypen Call by Value main() void redouble(int i) int i = 3; redouble(i); i=2*i; 3 i 3 i Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 45 / 56

Variablen in Methoden Primitive Datentypen Call by Value main() void redouble(int i) int i = 3; redouble(i); i=2*i; 3 i 6 i Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 45 / 56

Variablen in Methoden Primitive Datentypen Call by Value main() int i = 3; redouble(i); 3 i Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 45 / 56

Variablen in Methoden Call by Value Referenztypen (z.b. Arrays) main() Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 46 / 56

Variablen in Methoden Call by Value Referenztypen (z.b. Arrays) main() int[] arr = new int[6]; Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 46 / 56

Variablen in Methoden Call by Value Referenztypen (z.b. Arrays) main() int[] arr = new int[6]; arr Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 46 / 56

Variablen in Methoden Call by Value Referenztypen (z.b. Arrays) main() int[] arr = new int[6]; dosomething(arr); void dosomething(int[] a) arr Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 46 / 56

Variablen in Methoden Call by Value Referenztypen (z.b. Arrays) main() int[] arr = new int[6]; dosomething(arr); void dosomething(int[] a) arr copy Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 46 / 56

Variablen in Methoden Call by Value Referenztypen (z.b. Arrays) main() int[] arr = new int[6]; dosomething(arr); void dosomething(int[] a) arr a Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 46 / 56

Variablen in Methoden Call by Value Referenztypen (z.b. Arrays) main() int[] arr = new int[6]; dosomething(arr); void dosomething(int[] a) arr a[0]=2; a Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 46 / 56

Variablen in Methoden Call by Value Referenztypen (z.b. Arrays) main() int[] arr = new int[6]; dosomething(arr); void dosomething(int[] a) arr a[0]=2; a 2 Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 46 / 56

Variablen in Methoden Call by Value Referenztypen (z.b. Arrays) main() int[] arr = new int[6]; dosomething(arr); arr 2 Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 46 / 56

Referenztypen Variablen in Methoden Call by Value Listing 30: src/editarray.java 1 p u b l i c c l a s s E d i t A r r a y { 2 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { 3 i n t [ ] a r r = { 2, 3, 4 } ; 4 System. out. p r i n t l n ( Vorher : + a r r [ 0 ] ) ; 5 r e d o u b l e ( a r r ) ; 6 System. out. p r i n t l n ( Nachher : + a r r [ 0 ] ) ; 7 } 8 p u b l i c s t a t i c v o i d r e d o u b l e ( i n t [ ] a r r ) { 9 a r r [ 0 ] = 2 a r r [ 0 ] ; 10 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 47 / 56

Referenztypen Variablen in Methoden Call by Value Ausgabe: Vorher: 2 Nachher: 4 Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 48 / 56

Inhaltsverzeichnis Rekursion 1 Methoden Was sind Methoden? Methoden mit Rückgabe Bauanleitung Beispiele Beliebte Fehler Methoden ohne Rückgabe Bauanleitung Beispiele 2 Variablen in Methoden Scopes lokale Variablen Call by Value 3 Rekursion Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 49 / 56

Rekursion Rekursion Rekursion Eine Methode kann sich selbst aufrufen. Das nennt man Rekursion. Dies ist besonders dann nützlich, wenn ein bestimmter Schritt immer wieder ausgeführt wird. Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 50 / 56

Rekursion Rekursion Beispiel: Fakultätsfunktion n!: 0! = 1 n! = (n 1)! n Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 51 / 56

Rekursion Rekursion Beispiel: Fakultätsfunktion n!: 0! = 1 n! = (n 1)! n 3! = 2! 3 = 1! 2 3 = 0! 1 2 3 = 1 1 2 3 = 6 Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 51 / 56

Fakultät Rekursion Listing 31: src/factorial.java 1 p u b l i c c l a s s F a c t o r i a l { 2 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { 3 i n t f = f a c t o r i a l ( 3 ) ; 4 } 5 p u b l i c s t a t i c i n t f a c t o r i a l ( i n t i ) { 6 i f ( i <= 0) { 7 r e t u r n 1 ; 8 } 9 e l s e { 10 r e t u r n i f a c t o r i a l ( i 1) ; 11 } 12 } 13 } Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 52 / 56

Fakultät Rekursion factorial(3) Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 53 / 56

Fakultät Rekursion factorial(3) 3 factorial(2) Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 53 / 56

Fakultät Rekursion factorial(3) 3 factorial(2) 3 (2 factorial(1)) Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 53 / 56

Fakultät Rekursion factorial(3) 3 factorial(2) 3 (2 factorial(1)) 3 (2 (1 factorial(0))) Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 53 / 56

Fakultät Rekursion factorial(3) 3 factorial(2) 3 (2 factorial(1)) 3 (2 (1 factorial(0))) 3 (2 (1 1)) Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 53 / 56

Fakultät Rekursion factorial(3) 3 factorial(2) 3 (2 factorial(1)) 3 (2 (1 factorial(0))) 3 (2 (1 1)) 3 (2 1) Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 53 / 56

Fakultät Rekursion factorial(3) 3 factorial(2) 3 (2 factorial(1)) 3 (2 (1 factorial(0))) 3 (2 (1 1)) 3 (2 1) 3 2 Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 53 / 56

Fakultät Rekursion factorial(3) 3 factorial(2) 3 (2 factorial(1)) 3 (2 (1 factorial(0))) 3 (2 (1 1)) 3 (2 1) 3 2 6 Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 53 / 56

Rekursion Rekursion Vorteil der Rekursion: elegante, übersichtliche Programmierung bei kleinen Funktionen Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 54 / 56

Rekursion Rekursion Vorteil der Rekursion: elegante, übersichtliche Programmierung bei kleinen Funktionen Nachteil der Rekursion: Quelltext chaotisch bei vielen Rekursionsfälle (siehe Übungsaufgabe Rekursion vs Iteration ) Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 54 / 56

Rekursion Rekursion Vorteil der Rekursion: elegante, übersichtliche Programmierung bei kleinen Funktionen Nachteil der Rekursion: Quelltext chaotisch bei vielen Rekursionsfälle (siehe Übungsaufgabe Rekursion vs Iteration ) Gefahr der Endlosschleife Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 54 / 56

Rekursion Rekursion Vorteil der Rekursion: elegante, übersichtliche Programmierung bei kleinen Funktionen Nachteil der Rekursion: Quelltext chaotisch bei vielen Rekursionsfälle (siehe Übungsaufgabe Rekursion vs Iteration ) Gefahr der Endlosschleife unter Umständen sehr ineffizient(siehe Übungsaufgabe Fibonacci ) Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 54 / 56

Zusammenfassung Rekursion Ihr solltet jetzt wissen,... was ein Scope ist und was er bewirkt worin sich eine lokale Variable von einer globalen unterscheidet wie Parameter bei Methoden übergeben werden was Rekursion ist Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 55 / 56

Rekursion Noch Fragen? Heinemann, Hasanovic (TU Berlin) Javakurs 12: Methoden 6. März 2012 56 / 56