Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Einschub: Variable Argumentenanzahl Motivation ● ● Gesucht: Eine Methode, mit der 2, 3, 4, … Zahlen miteinander summiert werden können. Option 1 (Überladung): schreibe n verschiedene Varianten der Methode summiere, für 2, 3, 4, … Parameter: public static int summiere(int a, int b) { return a + b; } public static int summiere(int a, int b, int c) { return a + b + c; } public static int summiere(int a, int b, int c, int d) { return a + b + c + d; } Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH 2/7 Motivation ● Option 2: Übergeben der Parameter als Feld: public static int summiere(int[] werte) { int summe = 0; for ( int i = 0; i < werte.length; i++ ) summe += werte[i]; return summe; } oder (unter Verwendung einer vereinfachten Schleife): public static int summiere(int[] werte) { int summe = 0; for ( int wert : werte ) summe += wert; return summe; } Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH 3/7 Motivation ● ● Nachteil: Der Aufrufer muss die zu summierenden Zahlen vor dem Aufruf der Methode summiere in ein Feld verpacken. Beispiel: Bilde die Summe der Zahlen 1 bis 5: int[] werte = new int[5]; for ( int i = 0; i < werte.length; i++ ) { werte[i] = i + 1; } int summe = summiere(werte); Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH 4/7 variable Argument-Anzahl ● In Java 5 kann der letzte Parameter einer Methode als variabel deklariert werden. Dies geschieht mit der folgenden Syntax: Syntaxregel <Typ>... <VariablenName> ● ● ● Der Aufrufer kann beliebig viele Parameter des entsprechenden Typs übergeben (auch gar keinen). Java verpackt diese bei der Übergabe automatisch in ein Feld. Die aufgerufenen Methode greift auf ein Feld namens <VariablenName> mit Komponententyp <Typ> zu. Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH 5/7 variable Argument-Anzahl ● Beispiel: public static int summiere(int... werte) { int summe = 0; for ( int wert : werte ) summe += wert; return summe; } ● Aufruf: int summe = summiere(1, 2, 3, 4, 5); Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH 6/7 variable Argument-Anzahl ● ● Frage: Warum geht das nur für den letzten Methodenparameter? Antwort: Weil Java sonst Schwierigkeiten haben könnte, zu unterscheiden, ob ein übergebener Wert noch zu einem variablen Argument gehört, oder schon den nächsten Parameter darstellt. Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH 7/7