Methoden "Pointer" als Übergabeparameter

at0m

Mitglied
Hallo zusammen,

ich weiß, dass man in Java nicht explizit Pointer setzen kann. Mich würde aber interessieren, wie ich folgendes Problem trotzdem lösen kann.

Nehmen wir an ich habe folgende Methode in einer bestimmten Klasse:
Code:
private void function() {
    int x = 0;
    int y = 0;
    setXandY(x, y);
    system.out.println("x = " + x + ", y = " + y);
}

private void setXandY(int x, int y) {
    x = 5;
    y = 6;
}

In einer Programmiersprache, die Pointer kennt, würde ich der Methode setXandY() als Parameter jeweils einen Pointer auf x und y übergeben. Das system.out.println() würde dann ausgeben:
Code:
x = 5, y = 6

In Java würde aber ausgegeben werden:
Code:
x = 0, y = 0

Wie kann ich den Wert von x und y also in der Methode setXandY() setzen, ohne diese in z.B. ein Array zu packen, der Methode zu übergeben und aus dem zurückgegebenen Array wieder auszulesen?

Freue mich über jeden Tipp! 🙂
 
Moin,


Nehmen wir an ich habe folgende Methode in einer bestimmten Klasse:
Code:
private void function() {
    int x = 0;
    int y = 0;
    setXandY(x, y);
    system.out.println("x = " + x + ", y = " + y);
}

private void setXandY(int x, int y) {
    x = 5;
    y = 6;
}

In Java würde aber ausgegeben werden:
Code:
x = 0, y = 0

Wie kann ich den Wert von x und y also in der Methode setXandY() setzen, ohne diese in z.B. ein Array zu packen, der Methode zu übergeben und aus dem zurückgegebenen Array wieder auszulesen?
In Deinem Beispiel IMHO gar nicht!

Wie Du schon schriebst, kannst Du es natürlich mit einer eigenen (wie auch immer gearteten) Struktur (Array, eigene Klasse Pair etc.) lösen, die Du dann als Rückgabewert hast.
Oder Du schreibst zwei Funktion "setX" und "setY" ;-)

Eine weitere Möglichkeit wäre noch (wenn alles in der gleichen Klasse stattfindet), x und y als Membervariablen der Klasse anzulegen, oder, falls Zugriff von außen nötig ist, dann mit Getter- und setter-Funktionen zu arbeiten!

Gruß
Klaus
 
Java:
    private void aMethod() {
        int x = setX();
        int Y = setY();
        System.out.println ("X: " + x + ", Y: " + y + ".");
    }

    private int setX() {
        return 1024;
    }

    private int setY() {
        return 2048;
    }

Du kannst außerhalb eine Methode nicht ohne Weiteres auf interne Variablen zugreifen.

Sent from my GT-I9505 using Tapatalk
 
Die Referenz auf Objekte werden Call By Value übergen... aber die Objekte dahinter sind immer noch die gleichen... die kannst du verändern...

Java:
 private void function() {
        ObjectHolder<Integer> x = new ObjectHolder<Integer>(0);
        ObjectHolder<Integer> y = new ObjectHolder<Integer>(0);
        setXandY(x, y);
        System.out.println("x = " + x.getValue() + ", y = " + y.getValue());
    }

    private void setXandY( ObjectHolder<Integer> x,  ObjectHolder<Integer> y) {
        x.setValue(5);
        y.setValue(6);
    }

Java:
public class ObjectHolder <T> {
    public T value = null;
    
    public ObjectHolder() {}
    public ObjectHolder(T initialValue) {
        this.value = initialValue;
    }
    
    public T getValue() {
        return value;
    }
    public void setValue(T value) {
        this.value = value;
    }
    
}
 
Ich werde mir wohl schnell mal eine Klasse dafür basteln oder es in ein Array packen. Das macht in dem trivialen Fall bei mir am meisten Sinn.

Vielen Dank für die Hilfe!
 

Zurück
Oben