Variablenname als Parameter an Methode übergeben

muetze_online

Grünschnabel
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
 
Zuletzt bearbeitet:
Hallo,

wie wärs damit?

Code:
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
 
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
 
Hallo,

noch ein Versuch!

Code:
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
 
Hallo und schönen abend,

dritter und letzter Versuch! ! !

Code:
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
 
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
 
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
 
Auch wenn ich nicht Tom heiße...


Code:
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());
}

}
 
Zurück