# Variablenname als Parameter an Methode übergeben



## muetze_online (9. April 2006)

Hi,

ich möchte den Namen einer globalen Variable an eine Methode übergeben, die den Wert ändert. Ich habe mal ein kleines - aus der Luft gegriffenes Beispiel - konstruiert:


> public class Test {
> 
> int a;​int b;​
> public methode_A() {​mache(a);​}​
> public methode_B() {​mache(b);​}​public void mache(TYP? variable) {​berechnert_Wert = ... //rechne rechne rechne​variable = berechneter_Wert​// Jetzt soll a bzw. b den berechneten Wert haben.​}



Wie mache ich das? Das Zurückgeben des Wertes per return kommt bei mir leider nicht in Frage.

Vielen Dank im Voraus
muetze


----------



## flashray (9. April 2006)

Hallo,

wie wärs damit?


```
import java.io.PrintStream;

public class TestTT {

	private static PrintStream o = System.out;

	private int a = 2;

	private int b = 5;

	public void methode_A() {
		quadriere('a');
	}

	public void methode_B() {
		quadriere('b');
	}

	public void quadriere(char var) {
		switch (var) {
		case 'a':
			a = a * a;
			break;
		case 'b':
			b = b * b;
		}
	}

	public static void main(String[] args) {
		TestTT test = new TestTT();
		o.println(test.a);
		o.println(test.b);
		test.methode_A();
		test.methode_B();
		o.println(test.a);
		o.println(test.b);
	}
}
```


Vg Erdal


----------



## muetze_online (9. April 2006)

Danke für den Tipp, aber so einfach - wie es das Beispielt suggeriert - ist es leider nicht - diese workarounds sind nicht das was ich suche. Ich brauche schon die echte Übergabe des Namens des Parameters, um direkt auf ihn zuzugreifen (und ich muss es in Java machen - auch wenn Pointer in C vielleicht einfacher sind).

Trotzdem danke für deine Mühe.

muetze


----------



## flashray (9. April 2006)

Hallo,

noch ein Versuch!


```
import java.io.PrintStream;

public class ReferenceExample {

	private static PrintStream o = System.out;

	private int[] a = {2};

	private int[] b = {5};

	public void methode_A() {
		quadriere(a);
	}

	public void methode_B() {
		quadriere(b);
	}

	public void quadriere(int[] var) {
		var[0] = var[0] * var[0];
	}

	public static void main(String[] args) {
		ReferenceExample test = new ReferenceExample();
		o.println(test.a[0]);
		o.println(test.b[0]);
		test.methode_A();
		test.methode_B();
		o.println(test.a[0]);
		o.println(test.b[0]);
	}
}
```


Vg Erdal


----------



## flashray (9. April 2006)

Hallo und schönen abend,

dritter und letzter Versuch! ! !


```
import java.io.PrintStream;

public class ReferenceExample {

	private static PrintStream o = System.out;

	Int a = new Int(2);
	
	Int b = new Int(5);
	
	public void methode_A() {
		quadriere(a);
	}

	public void methode_B() {
		quadriere(b);
	}

	public void quadriere(Int i) {
		i.wert = i.wert * i.wert;
	}

	public static void main(String[] args) {
		ReferenceExample test = new ReferenceExample();
		o.println(test.a.wert);
		o.println(test.b.wert);
		test.methode_A();
		test.methode_B();
		o.println(test.a.wert);
		o.println(test.b.wert);
	}
	
	class Int {
		public int wert;
		public Int(int wert) {
			this.wert = wert;
		}
	}
}
```


Vg Erdal


----------



## muetze_online (10. April 2006)

Vielen Dank,

ich entnehme deinen Antworten, dass sowohl Arrays als auch Klassen als Referenz und nicht als Wert übergeben werden - mal sehen ob ich das nutzen kann. 

Gibt es denn keine Möglichkeit, direkt den Namen einer Variablen zu übergeben?

muetze


----------



## flashray (10. April 2006)

Hallo muetze,

eine kleine Korrektur: Nicht Klassen sondern Objekte bzw. Instanzen werden beim dritten Beispiel übergeben.

Zur Frage ob man, direkt Variablenreferenzen übergeben kann, weiß ich nicht. Es gibt jedoch die Reflexion API vom JDK, bin aber nicht vertraut damit, das ich dir sagen könnte obs ne Möglichkeit gibt.

Haaalloooo Tom,
könntest du bitte muetze sagen, ob man Variablenreferenzen als Parameter an Methoden übergeben kann? Ja? Nein?

Vg Erdal


----------



## muetze_online (10. April 2006)

Danke - natürlich meinte ich Objekte als ich Klassen sagte - so wie ich immer rechts meine, wenn ich links sage 

muetze


----------



## schnuffie (10. April 2006)

Auch wenn ich nicht Tom heiße...



```
public class FieldTest {

private int x;
private in y;
 
public void print() {
Fields[] af = this.getClass().getFields(); 
for (int i = 0; i < af.length; i++) {
print(af[i]);
}
}
 
private void print(Field f) {
System.out.println(f.getName());
}

}
```


----------



## Thomas Darimont (10. April 2006)

Hallo!

In Java werden alle Parameter (sowohl primitive als auch Referenztypen) by value uebergeben. Bei Referenztypen wird die Referenz als Value uebergeben. Wenn du einen Aehnlichen Effekt erreichen moechtest musst du schon mit Wrapper-Klassen oder Arrays arbeiten...

Siehe dazu auch dieses Beispiel.
http://www.tutorials.de/forum/java/...hode-aendern.html?highlight=call+by+reference

Gruss Tom


----------



## flashray (11. April 2006)

Hallo Schnuffie,

habe dich auch in die Liste für meine Schutzengel eingetragen. Werde ab jetzt auch dich rufen, wenns brennt.  


Vg Erdal


----------

