in Java gibt es keine Referenzen im C++-Sinne, alle Parameter werden by-Value übergeben. Wobei der Wert einer Objektvariablen die Speicher-Adresse darstellt, sodass bei der Übergabe einer Objektvariablen keine Kopie erzeugt wird, sondern die Methode tatsächlich die Möglichkeit hat, mit dem Objekt zu interagieren, sodass die Änderungen auch außerhalb der Methode sichtbar sind.
Gängige Lösungen sind:
Array der Größe 1 verwenden, das von der Methode gefüllt wird
kleine Klasse erstellen, die eine public-Variable hat: [c] class Wert {public int x;}[/c]. Davon kannst du eine Instanz erzeugen, der Methode mitgeben und diese kann dann den Wert setzen
das über den Rückgabewert lösen, z.B. ein Objekt zurückgeben, das mehrere Werte enthält
Danke für die schnelle Antowort. Aber ich komme einfach nicht weiter.
Bedeutet das, dass Java das nicht anbietet, man aber über Umwege das
erreichen kann? Hast du eventuell zu den 3 Möglichkeiten jeweils
ein Beispiel parat? Wäre toll!
Danke für die schnelle Antowort. Aber ich komme einfach nicht weiter.
Bedeutet das, dass Java das nicht anbietet, man aber über Umwege das
erreichen kann? Hast du eventuell zu den 3 Möglichkeiten jeweils
ein Beispiel parat? Wäre toll!
In Java gibt es sogenannte Wrapperklassen. Diese bilden Objekte aus primitiven Datentypen. Z.B.
Java:
publicclassWhatEver{//primitive Variableint i =2;//Objekt welches als Referenz übergeben werden kannInteger i2 =newInteger(i);publicvoidaddiere(int summand){
i2 =newInteger(i2.intValue()+ summand);}}
Zu beachten ist, dass der Wert innerhalb des Integer Objekts nicht veränderbar ist. Du musst also jedes Mal ein neues Objekt erstellen und es der Variable i2 zuweisen.
Vielleicht hilft dir das ja, auch wenn es lange nicht so geschickt ist wie in c++.
Richtig, in Java muss man da eine andere Lösung suchen:
Java:
intmethode(int eingabe,int[] ausgabe){
ausgabe[0]=1;return2;}...int[] ausgabe =newint[1];int y =methode(23, ausgabe);// nun habe ich zwei Werte aus der Methode: Rückabewert y und ausgabe[0]
Ich persönlich empfinde das nicht als schönen Stil, hab es aber schon öfter innerhalb von Swing-Klassen gesehen, also in der offiziellen Implementierung.
Variante 2:
Java:
classWert{publicint x;}intmethode(int eingabe,Wert ausgabe){
ausgabe.x =2;return1;}...Wert ausgabe =newWert();int y =methode(23, ausgabe);// wieder 2 Werte: y und ausgabe.x
Auch nicht so schön, aber immerhin einigermaßen sauber.
Variante 3:
Java:
classRückgabe {publicint x,int y;}Rückgabe methode(int eingabe){Rückgabe res =newRückgabe();
res.x =2;
res.y =1;}...Rückgabe res =methode(23);// wieder 2 Werte: res.x und res.y
Diese Variante ist ganz Ok, wenn man die Klasse vernünftig benennt usw.
In der Praxis kommt es darauf an, was du eigentlich machen möchtest - normalerweise hat man in Java immer Objekte und kann Werte auch im Objekt speichern, d.h. als Instanzvariable. Ich habe solche Tricks nur sehr selten benötigt.
normalerweise hat man in Java immer Objekte und kann Werte auch im Objekt speichern, d.h. als Instanzvariable. Ich habe solche Tricks nur sehr selten benötigt.