7.2 Felder als Parameter von Methoden
7.2 Felder als Parameter von MethodenFelder(Arrays) können wie Basistypen oder Referenzen als Übergabe- und Rückgabeparameter von Methoden verwendet werden.
Ein typisches Beispiel ist:
public static void main(String[] args) { ... if (args != null) if (args.length > 2 ) { tag = Integer.parseInt(args[0]); monat = Integer.parseInt(args[1]); jahr = Integer.parseInt(args[2]); ... }
Die beim Programmstart mitgegebenen Argumente werden in Form eines Feldes von Zeichenketten übergeben. Man erkennt beim Beispiel oben, dass im Quellcode eine Reihe von Fehlerfällen geprüft werden bevor die Anwendung auf das "unbekannte" Feld zugreift und die Zeichenketten in Zahlen verwandelt:
- args ist eventuell ein null Zeiger
- die Anzahl der Argumente ist unbekannt. Nur wenn mehr als zwei Elemente im Feld sind werden die ersten 3 Elemente ausgelesen.
Hierbei ist wichtig, dass die Felder nach dem gleichen Konzept wie Referenzen übergeben werden:
- Call by Reference: Das Feld wird nicht dupliziert. Es steht der Methode nicht unbedingt exklusiv zur Verfügung. Es wird nur eine Referenz übergeben.
Entsprechend können Felder auch als Rückgabeparameter dienen. Der Rückgabeparameter muss mit Typ und rechteckiger Klammer genannt werden. Hier int[]:
public static int[] createRandom(int size, int range) { int[] array1 = new int[size]; for (int i=0; i<size;i++) array1[i] = (int)(Math.random()*range); return array1;
Methoden mit variabler Argumentenanzahl
Es gibt Anwendungsfälle bei bei denen es wünschenswert ist eine variable Anzahl von Parameter zu benutzen. Seit Java 5 muss man hier nicht mehr ein Feld übergeben. Für sogenannte "varargs" Methoden gibt es ein "..." Konstrukt (drei Punkte) mit dem man die variable Anzahl der Parameter eines bestimmten Typs deklarieren kann.
Anbei das Beispiel einer Methode, die die Namen von Haustieren entgegen nimmt:
public void hausTiereMelden(String ... tierNamen) { for ( String t : tierNamen) System.out.println("Haustier: " +t); }
public static void test () { hausTiereMelden("Waldi","Bello","Rufus"); hausTiereMelden("Mikesh", "Napoleon"); hausTiereMelden(); // Keine Parameter! }
Hinweis: "varargs" Methoden dürfen auch ganz ohne Parameter aufgerufen werden. Die Implementierung der Methode muss daher auch mit einer null Belegung umgehen können!
- 8299 views
Müsste es im Beispiel Call by
Müsste es im Beispiel Call by Reference nicht (Math.random()%range) heißen?
Eigentlich nicht
Das Ergebnis von Math.random() liegt immer im Intervall von 0-1. Multipliziert man es bekommt man ein Ergbnis im Bereich 0 bis range. Durch das Casten auf (int) werden dann die Nachkommastellen abgeschnitten.