Methoden in Java dienen zum Auslagern von Programmteilen. Man übergibt beim Methodenaufruf Werte und erhält von der Methode einen berechneten Wert zurück. Dadurch werden Programme übersichtlicher, die Fehlersuche vereinfacht sich und Programmteile sind mehrfach verwendbar.
In diesem Artikel lernst Du den Aufbau von Methoden und deren Anwendung kennen. Begriffe wie Rückgabewert, Parameterliste und Methodenname werden erklärt. Dieser Artikel beschränkt sich auf die Anwendung statischer Methoden.
Stell Dir vor, Du nimmst heute morgen ein paar Orangen, übergibst diese an eine Orangenpresse und erhältst einen frisch gepressten Orangensaft zurück. Dieses Modell erklärt gut die Funktionsweise einer statischen Methode.
Methoden in Java dienen zum Auslagern von Programmteilen. Man übergibt beim Methodenaufruf Werte und erhält von der Methode einen berechneten Wert zurück. Die so erstellten Methoden erhöhen die Struktur/Übersichtlichkeit und sind mehrfach verwendbar. Die Fehlersuche wird vereinfacht und Arbeiten in Projekten lassen sich besser aufteilen.
Methoden werden in Klassen definiert und arbeiten normalerweise mit Objekten. Dies unterscheidet sie von Funktionen in anderen Programmiersprachen. Statische Methoden hingegen operieren unabhängig von Objekten und können so wie Funktionen eingesetzt werden. Dabei unterscheidet man:
Orangenmenge | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
Saft in ml | 90 | 180 | 270 | 360 | 450 |
Allgemein wird eine Methode wie folgt definiert.
Modifier Datentyp Methodenname(Parameterliste){}
Für unsere Methode, welche die Saftmenge berechnet, sieht es wie folgt aus:
static int berechneSaftmenge(int orangenzahl){ int saftausbeute = 90; return orangenzahl*saftausbeute; }
Man beachte:
int orangenzahl
). Diese werden unter Angabe des Datentyps mit Komma getrennt geschrieben. Ist die Parameterliste leer schreibt man nichts in die Klammern.return
gibt im Methodenrumpf an, welcher Wert nach dem Aufruf zurück gegeben, bzw. kopiert wird. Achte dabei auf die richtige Datentypangabe (hier int
) im Methodenkopf. Gibt man nichts zurück verwendet man das Schlüsselwort void
.public static void main(String[] args) { int glasgroesse; //Methode aufrufen zur Bestimmung der Trinkglasgröße glasgroesse = berechneSaftmenge(4); System.out.println("Glas: "+glasgroesse+" ml"); } static int berechneSaftmenge (int orangenzahl){ int saftausbeute = 90; return orangenzahl*saftausbeute; }
Für den Methodenaufruf in der main-Methode genügt folgender Quelltext:
glasgroesse = berechneSaftmenge(4);
Man beachte, dass wie bei einer Orangenpresse das Saftglas den Saft auffängt man bei Methoden eine Variable benötigt, um den Rückgabewert zu speichern. Der Datentyp dieser Variable muss mit dem Datentyp des Rückgabewertes übereinstimmen.
Beim Aufruf werden die aktuellen Parameter in die Methode kopiert. D.h. die Methode legt für den Dauer des Aufrufs neue Variablen an. Die Reihenfolge der Parameter und deren Datentyp müssen dabei korrekt gewählt werden.
Die benötigte Menge Holzdielen soll für eine vorgegebene Raumgröße in einer Methode berechnet werden.
06-statische-Methoden
an.Holzdielen
und deklariere die Methode berechneLaufendeMeterDielen
. Der Methode wird die Raumgröße in Quadratmeter übergeben und sie liefert die Holzmenge von 0,2 m breiten Holzdielen in laufenden Metern.Um bei einer Raumgröße von 8 m2 die laufenden Meter zu erhalten, teil man diesen Wert durch 0,2: 8 m2/0,2 m = 40 m
berechneLaufendeMeterDielen
wird aufgerufen und das Ergebnis am Bildschirm ausgegeben.Die Ausgabe sollte wie folgt aussehen:
Raumgröße: 12.5 qm
Laufende Meter Dielen: 62.5 m
Ordne den Methodenaufruf dem Methodenkopf zu oder finde die Fehler.
Welcher Aufruf passt zum Methodenkopf? Wähle eine Antwort.
int add(int a, double b){..}
double summe; summe=add(2, 3.2);
double summe; summe=add(3.2, 2);
int summe; summe=add(2, 3.2);
int summe; summe=add(2.3, 3);
Welcher Methodenkopf passt zu dem Aufruf? Wähle eine Antwort.
add(4,3.41);
int add(double a, double b){..}
void add(int a, double b){..}
int add(int a, double b){..}
void add(char a, double b){..}
Finde die Anzahl der Fehler im folgenden Quelltext.
char suche(char a, int p){..} ... int platz; platz=suche('a','b');
Finde die Anzahl der Fehler im folgenden Quelltext.
int bestimmeMenge(int a, int b){..} ... int terassengroesse, a=4; terassengroesse=bestimmeMenge(a,12);
Welcher Aufruf passt zum Methodenkopf? Wähle eine Antwort.
void anzeigen( ){..}
double summe; summe=anzeigen( );
anzeigen(2);
anzeigen( );
anzeigen(4);
Welcher Methodenkopf passt zu dem Aufruf? Wähle eine Antwort.
double x = berechne(4,3.41);
double berechne(int a, double b){..}
int berechne(int a, double b){..}
double berechne(boolean a, double b){..}
char berechne(boolean a, double b){..}
Eine Pyramide hat eine rechteckige Grundfläche mit den den Seiten $a$ und $b$ und der Höhe $h$. Die Grundfläche $G$ und das Volumen $V$ berechnet sich wie folgt:
$G=ab$ und $V=\frac{G\cdot h}{3}$.
Pyramide
und definiere die Methode berechnePyramidenVolumen
.berechnePyramidenVolumen
auf. Der Methode werden die beiden Seitenlängen und die Höhe der Pyramide übergeben. Das zurückgegebene Volumen wird am Monitor ausgegeben.Die Lösung sollte folgendermaßen aussehen:
Berechnung des PyramidenvolumensDie Mehrwertsteuer beträgt Anfang 2019 in Deutschland 19 %. Bedingt durch die Coronakrise wird diese im Juli 2020 um drei Prozentpunkte auf 16 % gesenkt.
Mehrwehrtsteuer
und definiere die Methode double berechneSteuervorteil(...)
.berechneSteuervorteil
auf. Der Methode wird der Bruttobetrag als Parameter übergeben. Die zurückgegebene Steuerersparnis bei verringertem Mehrwertseteuersatz soll ausgegeben werden.void berechneMehrwertsteuer (...)
, welche den Nettobetrag, den Mehrwertsteuerbetrag und den Bruttobetrag ausgibt.Die Lösung sollte folgendermaßen aussehen:
MehrwertsteuerrechnerIdee: I. Supper
Du fährst mit dem Auto und hältst eine konstante Geschwindigkeit ein.
Auf deiner linken Seite befindet sich ein Abhang. Auf deiner rechten Seite fährt ein riesiges Feuerwehrauto und hält die gleiche Geschwindigkeit wie du. Vor dir galoppiert ein Schwein, das eindeutig größer ist als dein Auto und du kannst nicht vorbei. Hinter dir verfolgt dich ein Hubschrauber auf Bodenhöhe. Das Schwein und der Hubschrauber haben exakt deine Geschwindigkeit.
Was unternimmst du, um dieser Situation gefahrlos zu entkommen?
Vom Kinderkarusell steigen und weniger Glühwein trinken.
public static void main(String[] args) { int[] reihe = {1,2,3,4,5}; //Methode aufrufen zum Inkrementieren erhoeheWertumEins(reihe); for(int i: reihe) System.out.print(i+" "); } static void erhoeheWertumEins (int[] folge){ for(int i=0;i<folge.length;i++) folge[i]++; }
Auch Arrays kann man in Methoden bearbeiten. Das besondere: Man übergibt nur die Adresse des Arrays (engl. reference). Ändert man die Werte des Arrays in der aufgerufenen Methode, werden diese Änderungen direkt in der main-Methode übernommen.
Die Methode erhöheWertumEins
hat in diesem Fall den Parameter int[] folge
, welcher lediglich auf die Adresse des Arrays verweist. In dieser Methode wird jeder Wert des Arrays um eins erhöht. Man beachte: Bei der for-Schleife kann die geschweifte Klammer entfallen, da nur eine Zeile Quelltext folgt. Bei mehreren Zeilen Quelltext im Schleifenkörper ist eine geschweifte Klammer zwingend erforderlich.
Die Schleife for(int i: reihe)
ist eine verbesserte for-Schleife (engl. enhanced for-loop). Sie arbeitet jedes Element des Arrays reihe
ab. Die Variable i
steht somit nicht für eine Laufvariable, sondern direkt für den Wert des Elements.
GroessteZahl
und definiere die Methode static void ziehe6aus49(int[] reihe)
zum Erzeugen einer Zahlenreihe.static void ausgebenZahlenreihe (int[] x)
um die unsortierte Zahlenreihe am Monitor auszugeben.static void bubblesort(int[] bubblereihe)
um die Zahlenreihe zu sortieren.static void ausgebenZahlenreihe (int[] x)
um die unsortierte Zahlenreihe auszugeben und gib den größten Wert der Zahlenreihe aus.import java.util.Random; ... //zufällige Zahlenreihe erstellen, ohne doppelte Zahlen for(int i=0; i<anzahl; i++) { //Erzeugt eine Zufallszahl zwischen 0 und 49 x = new java.util.Random().nextInt(50); for(int j=i; j>=0; j--) { if(x == zahlenreihe[j]){ x = new java.util.Random().nextInt(50); j = i; } } zahlenreihe[i]=x; }
Die Lösung sollte folgendermaßen aussehen:
Die unsortierte Zahlenreihe:die Methode, -n | Eine Methode ist ein ausgelagerter Programmteil. |
die Methodendefinition | Die Methode wird definiert durch den Methodenkopf und den Methodenrumpf. Der Methodenkopf besteht aus Modifier, Datentyp des Rückgabewertes, Methodenname und der Parameterliste; der Methodenrupf aus den Anweisungen inkl. der Rückgabe. |
der Methodenname, -n | Der Methodenname beginnt klein mit einem Verb, da die Methode etwas ausführt. |
die Parameterliste, -n | eine Liste von Datentypen mit Variablennamen, welche beim Methodenaufruf übergeben werden |
der Methodenaufruf, -e | Aufruf eines ausgelagerten Programmteils |
der Rückgabewert, -e | Wert der aus einer Methode zurückgegeben wird |