Methoden und Funktionen

Ähnliche Dokumente
Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

2. Unterprogramme und Methoden

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

Methoden und Wrapperklassen

Variablen und Datentypen

Klassenvariablen, Klassenmethoden

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Variablen und Datentypen

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

System.out.println("TEXT");

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

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

JAVA - Methoden - Rekursion

Programmiertechnik Klassenmethoden

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

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

JAVA - Methoden

Ausnahmen. Exceptions. Definition Ausnahmen erzeugen Ausnahmen abfangen Ausnahmen weiterleiten. Dr. Beatrice Amrhein

Java Einführung Methoden. Kapitel 6

2. Programmierung in C

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

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Kontrollstrukturen und Logik

Aufgabenblatt 3. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

Klausur Fachprüfung Wirtschaftsinformatik. Name:

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Umsetzung einer Klassenkarte in einer Programmiersprache

Einstieg in die Informatik mit Java

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Einstieg in die Informatik mit Java

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Exceptions. CoMa-Übung VII TU Berlin. CoMa-Übung VII (TU Berlin) Exceptions / 1

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

1 Organisatorisches. 2 Compilezeit- und Laufzeitfehler. 3 Exceptions. 4 Try-Catch-Finally

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

5. Java Arrays und Strings

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:

Variablen und Datentypen

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

Elementare Konzepte von

Java : Fehlerbehandlung.

Klausur Fachprüfung Wirtschaftsinformatik Dauer: 2 Stunden. Name:

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Musterlösung Stand: 5. Februar 2009

Institut für Informatik

Dr. Monika Meiler. Inhalt

Primitive Datentypen, Eingaben, Kontrollstrukturen und Methodendeklaration

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

1 Klassen anlegen und Objekte erzeugen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

1 Klassen anlegen und Objekte erzeugen

Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Aufgabenblatt 3

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Einstieg in die Informatik mit Java

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

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Probeklausur Informatik 2 Sommersemester 2013

Fragenkatalog ESOP WS 16/17

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

6 Speicherorganisation

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

Einstieg in die Informatik mit Java

Geoinformatik und Vermessung Prüfung 502 : Informatik (JAVA)

Eine JAVA Einführung ... Quellcode:... COMA Übung 3. T.Bosse. A.Griewank. Vorschau JAVA Programme Sprachen Kate

Arbeitsblatt zu Methoden

Programmieren I. Fehlerbehandlung Exceptions. Heusch 2. Bd, 3 Ratz 10. Institut für Angewandte Informatik

3. Anweisungen und Kontrollstrukturen

Grundlagen der Programmierung

Einführung in C. EDV1-04C-Einführung 1

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Programmieren in Java

Grundlagen der Programmierung

Speicher und Adressraum

Java: Eine kurze Einführung an Beispielen

Die Klasse java.lang.object. Thorsten Treffer

Java - Programmierung - Prozedurale Programmierung 1

Aufgabenblatt 5. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

Einstieg in die Informatik mit Java

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Einstieg in die Informatik mit Java

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Java Cheatsheet. Mehrzeiliger Kommentar (beginnt mit /* und endet mit */)

Einführung in das Programmieren Probeklausur Lösungen

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Transkript:

Programmieren mit Java Modul 4 Methoden und Funktionen Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Methoden 3 2.1 Methoden ohne Rückgabewert (Prozeduren)................ 3 2.2 Methoden mit Rückgabewert (Funktionen)................. 4 2.3 Methoden mit Parametern.......................... 5 3 Methoden aus der Klasse Math 6 4 Überladen von Methoden 7 5 Gültigkeitsbereiche von Variablen 8 6 Rekursion 9 6.1 Beispiel 1: Fakultät.............................. 9 6.2 Beispiel 2: Fibonacci............................. 10 7 Fehlerbehandlung mit Exceptions 10 7.1 Werfen einer Exception............................ 11

Begriffe Methode Subroutine Prozedur Funktion Parameter Rückgabewert Rückgabetyp Sichtbarkeit von Variablen Überladen Rekursion Exception Zufallszahl Modularität Autoren: Lukas Fässler, Barbara Scheuner, David Sichau E-Mail: et@ethz.ch Datum: 07 August 2017 Version: 1.1 Hash: a9ee87a Trotz sorgfältiger Arbeit schleichen sich manchmal Fehler ein. Die Autoren sind Ihnen für Anregungen und Hinweise dankbar! Dieses Material steht unter der Creative-Commons-Lizenz Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International. Um eine Kopie dieser Lizenz zu sehen, besuchen Sie http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de 2

1 Modulübersicht Durch das Modularitätsprinzip wird ein Gesamtproblem in getrennte Teilprobleme zerlegt. In diesem Modul lernen Sie Möglichkeiten kennen, wie Sie Anweisungen in Unterprogrammen (oder Subroutinen) zusammenfassen können. Unterprogramme sind funktionale Einheiten, die von mehreren Stellen in einem Programm aufgerufen werden können. Auf diese Weise muss ein Programmteil nur einmal entwickelt und getestet werden, wodurch sich der Programmieraufwand verringert und der Programmcode verkürzt. Werden beim Aufrufen des Unterprogramms Daten übergeben, werden diese als Parameter bezeichnet. In vielen Programmiersprachen werden zwei Varianten von Unterprogrammen unterschieden: jene mit einem Rückgabewert (Funktionen) und jene ohne Rückgabewert (Prozeduren). In Java bezeichnet man beide Varianten generell als Methoden, die Parameter und Rückgabewert haben können. 2 Methoden In Java besteht eine Methode aus einem Kopf (oder Signatur) mit den Modifikatoren public static 1, dem Rückgabetyp, dem Namen, den Parametern sowie dem Rumpf in geschweiften Klammern {. Die Ausführung einer Java-Applikation startet meist in der Haupt oder main-methode, die sich oft darauf beschränkt, andere Methoden aufzurufen. 2.1 Methoden ohne Rückgabewert (Prozeduren) Methoden ohne Rückgabewert haben Sie bereits verwendet: Zum Beispiel die Methode System.out.println(), welche einen Zeilenumbruch auslöst. Sie können aber auch eigene Methoden schreiben, welche von Ihnen vorgegebene Aufgaben erfüllen. Methoden ohne Rückgabewert sehen wie folgt aus: Schreibweise: void methodenname() { //Signatur der Methode // Anweisungen Das Wort void gibt dabei an, dass kein Rückgabewert erwartet wird. Die leere Klammer () bedeutet, dass keine Parameter übergeben werden. 1 Die Bedeutung der Modifikationen ergeben sich aus der Objektorientierung von Java und werden in diesem Buch nicht behandelt. 3

Beispiel: Die folgende Klasse beinhaltet die Haupt-Methode mit dem Namen main und die Methode ausgabe, welche in der main-methode aufgerufen wird: public class ProzedurTest{ public static void main(string[] args){ ausgabe(); public static void ausgabe(){ //Signatur der Methode System.out.println("die Methode wurde ausgeführt"); 2.2 Methoden mit Rückgabewert (Funktionen) Methoden mit Rückgabewert werden verwendet, um ein Resultat aus den Anweisungen in der Methode zu gewinnen. Der Datentyp des Rückgabewerts steht dabei direkt vor dem Methodennamen. In der Methode selbst muss sichergestellt werden, dass in jedem Fall ein Wert vom entsprechenden Typ zurückgegeben wird. Um einen Wert zurückzugeben, wird das Wort return verwendet. Schreibweise: rückgabetyp methodenname() { //Signatur der Methode // Anweisungen Beispiel: Die folgende Klasse beinhaltet eine main-methode und eine weitere Methode getanswer, welche in der main-methode aufgerufen wird: public class ProzedurTest{ public static void main(string[] args){ int wert = getanswer(); public static int getanswer(){ //Signatur der Methode return 42; Der Rückgabewert in obrigen Beispiel ist vom Typ Integer. Bei Methoden mit Rückgabewert muss darauf geachtet werden, dass in jedem Fall, der eintreffen könnte, zwingend ein Wert zurückgegeben wird. 4

Beispiel: boolean hallo(){ int i = 1; if (i == 1){ return true; else { System.out.println("tritt nie ein"); Auch wenn der else-fall in dieser Methode nie eintrifft, muss darauf geachtet werden, dass auch in diesem Fall etwas zurückgegeben würde. Korrekt wäre somit: boolean hallo(){ int i=1; if (i==1){ return true; else { System.out.println("tritt nie ein"); return false; 2.3 Methoden mit Parametern Beide Arten von Methoden (also Prozeduren und Funktionen) können in der Signatur Parameter verlangen. Parameter sind Variablen, deren Initialisierung beim Aufruf der Methode geschieht und die zur Erfüllung der Aufgabe der Methode nötig sind. Beispiel: void addiereundgibaus(int x, int y){ int z = x + y; System.out.println("Summe: "+z); Diese Methode kann nun z.b. mit den Werten 3 und 2 aufgerufen werden mit der Anweisung: addiereundgibaus(3,2); Methoden mit Rückgabewert können nun auch noch einen Wert zurückgeben. 5

Beispiel: int addiere (int x, int y){ int z = x + y; return z; Diese Methode kann nun z.b. aufgerufen werden mit: int resultat = addiere(3,2); Der Rückgabewert wird hier in der Variable resultat gespeichert, deren Datentyp mit dem Rückgabetyp übereinstimmt. 3 Methoden aus der Klasse Math Die Klasse Math bietet einige Methoden an, welche mathematische Funktionen realisieren. All diese Methoden sind Funktionen, weil sie einen Rückgabewert (das Resultat der Berechnung) besitzen. Als Übergabeparameter erwarten sie meist eine oder zwei Zahlen. Beispiel: public class TestMath{ public static void main(string[] args){ double x= 19.7; double y= 20.3; double groesserezahl = Math.max(x,y); double kleinerezahl = Math.min(x,y); double abrunden = Math.ceil(x); Eine Methode ohne Parameter in der Klasse Math ist die Funktion Math.random(). Diese Funktion gibt eine Zufallszahl zwischen 0 und 1 zurück, wobei die Zahl gleich 0 sein kann, aber immer kleiner als 1 ist. Mit Hilfe dieser Methode kann eine zufällige ganze Zahl zwischen 1 und x erzeugt werden. Dies geschieht in drei Schritten: 1. Erzeugen einer Zufallszahl zwischen 0 und 1. 2. Multiplikation dieser Zahl mit x. Dies ergibt eine Gleitkommazahl Zahl zwischen 0 und x. 3. Runden dieser Zahl. 6

Beispiel: // Generierung ganzer Zahl zwischen 0 und 99 durch abrunden int zufallszahl1 = (int)(math.random()*100); // Generierung ganzer Zahl zwischen 0 und 100 durch runden long zufallszahl2 = Math.round(Math.random()*100); 4 Überladen von Methoden Verschiedene Methoden können denselben Namen haben, wenn sie unterschiedliche Parameter erhalten. Unterschiedliche Rückgabewerte alleine sind nicht ausreichend. Haben zwei Methoden denselben Namen, aber erhalten unterschiedliche Typen oder Anzahl von Parameter, nennt man die Methoden überladen. Ein populäres Beispiel, das Sie schon oft verwendet haben, ist die Methode print() bzw. println(). Dieser Methode können Werte von Typ String, int, double, etc. übergeben werden. Für Sie als Benutzer sieht es aus, als würden Sie immer dieselbe Methode aufrufen. Tatsächlich ist es aber so, dass unterschiedliche Methoden entsprechend dem Datentyp aufgerufen werden. Wir können also die beiden folgenden Methoden mit identischem Namen linie in der gleichen Klasse schreiben: // Signatur mit einem Parameter public static void linie(int x){ for (int i=0; i<x; i++){ System.out.print( - ); // Signatur mit zwei Parametern public static void linie(int x, char c){ for (int i=0; i<x; i++){ System.out.print(c); Wenn Sie nun die Methode mit nur einem Parameter-Wert aufrufen, wird die erste Methode verwendet, mit zwei entsprechenden Werten die zweite: linie(8); linie(19, - ); 7

5 Gültigkeitsbereiche von Variablen Variablen haben eine beschränkte Lebensdauer. Einige Variablen werden erst mit dem Beenden des Programms gelöscht, andere schon früher. Eine Variable ist immer für den Anweisungsblock (siehe Modul 2) oder eine Klasse gültig, in dem sie deklariert wurde. Eine Variable, welche am Anfang einer Methode deklariert wird, wird auch wieder gelöscht, wenn die Methode beendet wird. Wenn man den Wert dieser Variablen später noch benötigt, muss er an die aufrufende Methode zurückgegeben werden. Beispiel: public class VariablenSichtbarkeit{ public static int global = 20; public static void main(string[] args){ System.out.println("Werte zwischen 1 und "+ global); ausgabe(); public static void ausgabe(){ int zufall = 0; for (int i=0; i<30; i++){ zufall = (int) (Math.random() * global) + 1; Die Variable global ist dabei für die ganze Klasse gültig. Die Variable zufall ist hingegen nur innerhalb der Methode ausgabe gültig und die Variable i nur innerhalb der Schleife. 8

Beispiel: Folgender Code würde, wenn die kommentierte Zeile verwendet würde, zu einer Fehlermeldung führen, da die Variable zufall in der main-methode nicht gültig ist: public class VariablenSichtbarkeit2{ public static void ausgabe(){ int zufall = (int) (Math.random() * global) + 1; public static void main(string[] args){ ausgabe(); // System.out.println("Werte von 1 bis "+ zufall); 6 Rekursion Bei der Rekursion ruft eine Methode sich selber wieder auf. Damit sich die Methode nicht endlos immer wieder selbst aufruft, was die gleichen Konsequenzen wie eine Endlosschleife hätte, benötigt sie eine Abbruchbedingung, welche diese Folge von Selbst-Aufrufen stoppt. Um eine Rekursion zu programmieren, müssen Sie zwei Elemente bestimmen: Basisfall: in diesem Fall ist das Resultat der Berechnung schon bekannt. Dieser Fall ist die Abbruchbedingung der Rekursion. Rekursiver Aufruf: es muss bestimmt werden, wie der rekursive Aufruf geschehen soll. 6.1 Beispiel 1: Fakultät Die Berechnung der Fakultät f(x) = x! von x kann mit einer rekursiven Methode realisiert werden. Basisfall: für die Werte 0 und 1 ist die Fakultät 1. Rekursion: x! = x (x 1)! für x > 1. int fakultaet(int x){ if ((x == 0) (x == 1){ // Basisfall return 1; else { return x * fakultaet(x-1); // Rekursiver Aufruf 9

6.2 Beispiel 2: Fibonacci Ein weiteres beliebtes Beispiel für Rekursionen ist die Fibonacci-Folge. Diese unendliche Folge von natürlichen Zahlen beginnt mit 0 und 1. Die danach folgende Zahl ergibt sich jeweils aus der Summe der zwei vorangegangenen Zahlen: Die Folge lautet also 0, 1, 1, 2, 3, 5, 8,... Bei der Fibonacci-Folge sind bei jedem Schritt zwei rekursive Aufrufe nötig: f(n) = f(n 1) + f(n 2) für n 2 mit den Anfangswerten f(1) = 1 und f(0) = 0. Basisfall: Für den Fall, dass n gleich 0 oder 1 ist, wissen wir, dass 0 bzw. 1 zurückgegeben werden muss. Rekursion: Für alle anderen Fälle rufen wir die Funktion wieder auf, wobei wir den übergebenen Wert um jeweils 1 und 2 verringern. int fibonacci(int n) { if (n == 0){ // Basisfall 1 return 0; else if (n == 1){ // Basisfall 1 return 1; else { // zwei Mal rekursiver Aufruf return (fibonacci(n-1) + fibonacci(n-2)); Beachten Sie, dass Funktion fibonacci in Beispiel 2 sich selbst gleich zweimal aufruft. Man spricht auch von kaskadenförmiger Rekursion. In Beispiel 1 erfolgt nur ein einzelner Selbstaufruf, was man als lineare Rekursion bezeichnet. 7 Fehlerbehandlung mit Exceptions Exceptions (Ausnahmen) werden durch Ausnahmesituationen bei der Programmausführung ausgelöst. Dadurch sollen Programmabbrüche verhindert werden. In Java ermöglicht die try-catch-anweisung das Auffangen und Behandeln von Exceptions innerhalb einer Methode. Beispiel: Vielleicht wollten Sie schon einmal aus Versehen einen Text jk in eine Zahl umwandeln oder in einem Array auf einen Index zugreifen, der ausserhalb des Arrays liegt. Exceptions müssen nicht zwingend bis zum Benutzer durchdringen (d.h. auf der Konsole erscheinen). Man kann sie auch abfangen (catch) und eine Lösung für das Problem suchen. Abgefangen können die Exceptions mit: 10

try { // Irgendetwas, dass einen Fehler auslösen könnte catch (Exception c) { // Lösung des Problems Beispiel: Hier könnte der Benutzer anstelle einer ganzen Zahl zum Beispiel ein Zeichen eingeben. Diese Fehlereingabe kann z.b. wie folgt behandelt werden: public static void main(string[] args) { Scanner scan = new Scanner(System.in); int zahl = 0; System.out.println("Bitte eine ganze Zahl eingeben"); String wert = scan.nextline(); try { zahl = Integer.parseInt(wert); catch (Exception e){ System.out.println("Das ist keine ganze Zahl"); Zahl = 0; 7.1 Werfen einer Exception Sie können das Konstrukt der Exception auch selber verwenden. Wenn Sie in einer eigenen Methode einen Fehler kommunizieren wollen, dann können Sie dort eine Exception werfen (throw). Mit der Anweisung throw new Exception() lösen Sie einen Fehler aus. Die Signatur einer Methode, welche eine Exception auslösen kann, muss noch durch den Zusatz throws Exception (heisst so viel wie wirft Fehlermeldungen) ergänzt werden. 11

Beispiel: public class ExceptionTester{ public static void main(string[] args) { try { tester(-3); catch (Exception e) { System.out.println(e.getMessage()); public static void tester(int x) throws Exception{ if (x < 0){ throw new Exception(); 12