Mehrfache Parameter in Java (Mehrfache Parameter in Java), Lektion, Seite 723621
https://www.purl.org/stefan_ram/pub/parameterdeklaration_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Mehrere Parameter in Java 

Wir hatten schon früher Methoden mit mehreren  Parametern aus der Standardbibliothek aufgerufen.

»java.lang.Double.sum(double,double)« ist eine Wertmethode mit zwei Parametern.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( java.lang.Double.sum( 10.0, 2.0 )); }}
Protokoll
12.0

»java.lang.System.setProperty(java.lang.String,java.lang.String)« ist eine Wirkmethode mit zwei Parametern.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.setProperty( "user.country", "IT" ); }}
Protokoll

Mehrere Parameter

Mehrere Parameter können durch ein Komma  getrennt angegeben werden. Beim Aufruf sind dann ebensoviele Argumente anzugeben wie Parameter deklariert wurden, und der Typ des jeweiligen Arguments muß ein Untertyp des Typs des Parameters an derselben Position sein.

Main.java

public final class Main
{

public static void hallo( final int a, final double x )
{ java.lang.System.out.println
( "Hallo " +
a +
" und " +
x +
"!" ); }

public static void main( final java.lang.String[] args )
{ hallo( 2, 3 ); }}

Protokoll
Hallo 2 und 3.0!

Syntax der Parameterliste

In den Klammern hinter dem Methodennamen einer Methodendeklaration kann eine Parameterliste  stehen.

Parameterliste
Parameterliste
.-------------------------------------------------------------.
| .----------------. |
| | .-----. v .-----. .------------. v
----'---.---'--->( final )---'--->| Typ |--->| Bezeichner |---.---'--->
^ '-----' '-----' '------------' |
| .-. |
'-----------------------( , )<------------------------'
'-'

(Die Bedeutung von »Typ« und »Bezeichner« im obigen Syntaxdiagramm ist dabei wie schon zuvor bei der Syntax Variablendeklaration.)

Einschränkungen der Parameterliste

Alle Bezeichner einer Parameterliste müssen unterschiedlich sein.

Semantik der Parameterliste

Durch die Parameterliste erhält die deklarierte Methode Parameter mit den in der Parameterliste angegebenen Eigenschaften, Typen und Namen.

Deklaration und Signatur

Die Deklaration einer Methode enthält im Köpfer auch die Informationen zur Signatur  der Methode, nämlich den Bezeichner der Methode (den Methodennamen) und die Typen der Parameter.

(Desweiteren findet man in der Deklaration auch die Informationen zum Deskriptor  einer Methode. [Der Deskriptor eine Methode ist durch die Signatur der Methode und ihre Rückgabespezifikation bestimmt.])

Wie schon früher gesagt, wird die Proklamation  in der Dokumentation einer Methode aus dem Kopf der Methodendeklaration gebildet. Dabei wird das »final« von Parameterdeklarationen entfernt.

Einlesen von Benutzereingaben

Das Einlesen von Benutzereingaben wird erst im Aufbaukurs behandelt werden, da im Grundkurs noch nicht alle dafür nötigen Java -Kenntnisse vermittelt wurden.

In vielen Programmierkursen wird das Einlesen von Benutzereingaben hingegen schon recht früh  behandelt. Oft werden dabei ein oder zwei Werte eingelesen und dann ein Ergebnis ausgegeben, wie beispielsweise in den folgenden Protokollen eines Programmes, das zwei Zahlen einliest und deren Summe berechnet.

Protokoll
Augend?
14
Addend?
6
Summe = 20
Protokoll
Augend?
20
Addend?
4
Summe = 24

Einem Programm, das zwei Zahlenwerte einliest und deren Summe ausgibt  entspricht allerdings eine Methode, die zwei Parameter hat und ein Ergebnis liefert. Insofern können wir in diesem Grundkurs das Wesentliche eines Programmes mit Ein- und Ausgabe durchaus durch Programmierung solcher Methoden nachvollziehen.

Main.java

public final class Main
{

public static int summe( final int augend, final int addend )
{ return augend + addend; }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( summe( 14, 6 ));
java.lang.System.out.println( summe( 20, 4 )); }}

Protokoll
20
24

Die Programmierung mit Methoden hat sogar den Vorteil, daß auch die „Eingabewerte“ (wie beispielsweise »14« und »6«) im Programm enthalten sind und daher beim mehrfachen Erproben eines Programmes nicht immer wieder mühevoll neu eingegeben werden müssen.

Oben entspricht die Methode »summe« einem Programm, das zwei Werte einliest  und deren Summe ausgibt, auch wenn das Einlesen technisch durch zwei Parameter  realisiert wird. Die Angabe der Argumentwerte »14, 6« entspricht der Eingabe zweier Zahlen, der gesamte Aufruf »summe( 14, 6 )« entspricht dem Start eines Programmes „Summe“ und der Eingabe der beiden Werte »14« und »6«. – Methoden sind ja nichts anderes als Programme  (im weiteren Sinne).

Ausgabe eines Liedes

Wir können die Ausgabe eines Liedes nun mit noch weniger Wiederholungen programmieren. Unser Programm verdeutlicht tatsächlich auch das Aufbauprinzip des Textes.

Main.java

public final class Main
{

public static void strophe
( final java.lang.String text, final java.lang.String addendum )
{ final java.lang.String ln = java.lang.System.lineSeparator();

java.lang.System.out.println
( text + ", -" + ln +
"Sim sa la dim, bam ba," + ln +
"Sa la du, sa la dim -" + ln +
text + addendum + "." + ln ); }

public static void main( final java.lang.String[] args )
{ strophe( "Auf einem Baum ein Kuckuck", " sass" );
strophe( "Da kam ein junger Jaeger", "smann" );
strophe( "Der schoss den armen Kuckuck", " tot" ); }}

Protokoll
Auf einem Baum ein Kuckuck, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Auf einem Baum ein Kuckuck sass.

Da kam ein junger Jaeger, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Da kam ein junger Jaegersmann.

Der schoss den armen Kuckuck, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Der schoss den armen Kuckuck tot.

Übungsfragen

?   Übungsfrage

Welche Ausgabe erzeugt das folgende Programm?

(Die Argumente eines Methodenaufrufs werden in der Reihenfolge von links nach rechts  ausgewertet.)

Main.java

public final class Main
{ public static int u(){ java.lang.System.out.print( "u" ); return 1; }

public static int v(){ java.lang.System.out.print( "v" ); return 2; }

public static int w( final int a, final int b )
{ java.lang.System.out.print( "w" ); return a + b; }

public static void main( java.lang.String[] args )
{ java.lang.System.out.println( w( u(), v() )); }}

Spezialisierung von Methoden ⃗

Zu parametrisierten Methoden  kann durch eine Festlegung einiger Argumentwerte eine Spezialisierung  deklariert werden.

Main.java

public final class Main
{

public static int sum( final int a, final int b )
{ return a + b; }

public static int inc( final int a )
{ return sum( a, 1 ); }

public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( inc( 4 )); }}

Protokoll
5

Die spezialisierte Methode »inc« erledigt ihre Arbeit, indem sie die allgemeinere parametrisierte Methode »sum« verwendet. Sie ist allerdings auf die Fälle spezialisiert, in denen »1« addiert werden soll.

Umgekehrt ist es jedoch oft nicht möglich, zu einer spezialisierten Methode eine allgemeinere Methode zu schreiben. Daher sollten Aufgaben zunächst durch hinreichend allgemeine Methoden erledigt werden, zu denen dann für Spezialfälle noch Spezialisierungen geschrieben werden können.

Übungsaufgaben

Ab jetzt dürfen bei der Bearbeitung von Übungsaufgaben immer auch Konstanten, Variablen  oder Methoden  deklariert werden, falls dies als hilfreich erscheint, auch wenn es in der Aufgabenstellung nicht explizit verlangt oder erwähnt wird! (Auch dürfen, wie schon gesagt, immer Methoden der Standardbibliothek aufgerufen werden, wenn dies nicht in einer Aufgabenstellung explizit verboten sein sollte.)

/   Übungsaufgabe

Schreiben Sie eine Methode mit zwei Parametern vom Typ »double«, welche bei einem Aufruf die Summe der Argumentwerte des Aufrufs ausgibt.

/   Übungsaufgabe

Schreiben Sie eine Methode »sekunden« mit einem Parameter vom Typ »int« und einem Parameter vom Typ »double«, von denen der erste eine Zeit in Minuten und der zweite eine Zeit in Sekunden angeben soll. Die Methode soll die Summe der beiden Zeiten in Sekunden als double-Wert zurückgeben.

Beispielsweise sollte »sekunden( 1, 1.1 )« den Wert «61.1» haben.

/   Übungsaufgabe ⃗

Schreiben Sie eine Methode mit drei Parametern vom Typ »int«, welche mit Hilfe der java.lang.Math.max-Methoden das Maximum ihrer drei Argumentwerte zurückgibt.

Das Maximum einer endlichen Wertmenge ist ihr größter Wert.

/   KMI ⃗

Schreiben Sie eine Methode, die aus einem Gewicht in kg (»double«) und einer Länge (Körpergröße) in Meter (»double«) den KMI (Körpermasseindex) berechnet.

Zitate *

Java Language Specification 8, 15.12 Method Invocation Expressions
The argument expressions (possibly rewritten as described above) are now evaluated to yield argument values. Each argument value corresponds to exactly one of the method's n formal parameters.
The effect of this is to assign the argument values to corresponding freshly created parameter variables of the method

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723621 stefan_ram:723621 Mehrfache Parameter in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723621, slrprddef723621, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/parameterdeklaration_java