Call By Referene?

r1d1

Mitglied
Moin,

hab jetzt auch schonmal in Google und Büchern gekuckt, aber nichts gefunden so wie ich es haben will 🙁

Gibt es keine einfache Lösung, Call By Reference in Java umzusetzen?

Ich weiß, dass Java eigentlich kein Call By Reference vorsieht, aber es gibt doch sicher einen Weg, dies zu umgehen. Kann man eventuell eine eigenen Methode schreiben, die aufgerufen werden muss, um Call By Reference zu verwenden ???:L Bin leider noch ein Anfänger, deswegen sind meine Möglichkeiten bez. Kreativitit leider (hoffentlich noch) begrenzt, und bräuchte daher Hilfe.

Was ich will ist ganz einfach:

Java:
public class GamePanel {

	public static void main(String[] args) {

		int a = 5;
		int b = 8;

		CallByValue(a);
		System.out.println(a); 
		// call by value: immer noch 5;

		CallByReference(b);
		System.out.println(b); 
		// call by reference: funktioniert nicht :(

	}

	static int CallByValue(int _a) {
		return _a * 2;

	}

	static int CallByReference(int b) {
		return b * 3;
	}

}

Ich weiß, dass die Methode CallByReference so wie ich sie geschrieben hat nicht funktioniert und auch warum sie nicht funktioniert, ich habe sie nur als Gedankengang dennoch aufgeschrieben. Was ich möchte ist einfach nur eine Methode, die die Variable b (der main-methode) verändern kann.

Wäre dankbar für Hilfe, kann mir eigentlich nicht vorstellen dass das allzu schwer umzusetzen ist..
 
In Java gibt es kein CallByReference, Punkt.

Die gute Nachricht: Java bietet Referenzen um auf Objekte zuzugreifen, diese können kopiert werden, da die Referenzen dann immer noch auf dasselbe Objekt zeigen.
Bei primitiven funktioniert das natürlich nicht.

Abgesehen davon ist es in deinen Beispielen vollkommen egal ob CallByReference oder CallByValue, da die Methodenparameter nie verändert werden.
 
Abgesehen davon ist es in deinen Beispielen vollkommen egal ob CallByReference oder CallByValue, da die Methodenparameter nie verändert werden.

Meinst du damit dass es vollkommen egal ist welche MEINER Methoden (CallByValue(); CallByReference()) ich verwende? Das ist mir klar.

Falls du aber meinst dass es bei mir egal ist ob ich Call By Value oder Call By Reference, stimmt das doch nicht wirklich, oder?
Ich möchte ja eine Methode, die mir eine Variable außerhalb der besagten Methode verändert, meines Wissens funktioniert das nicht mit Call By Value.


Könntet ihr mir vielleicht ein Beispiel geben, wie so eine Wrapper-Klasse (oder was anderes) dann aussieht?

Was ich will, ist ja einfach nur:

Java:
int a = 5;
CallByReference(a)
System.out.println(a) // Hier soll der durch die Methode veränderte Wert rauskommen, in meinem Beispiel 15;
 
Meinst du damit dass es vollkommen egal ist welche MEINER Methoden (CallByValue(); CallByReference()) ich verwende? Das ist mir klar.
Ich meinte was ich sagte: In deinen Beispielen ist es egal 🙂

Ansonsten: Parameter von Methoden ändern zu lassen kann schnell zu verwirrungen und Überraschungen führen, solte man normalerweise meiden.
Lieber Rückgabewerte verwenden, bei mehreren darüber nachdenken ob man nicht doch OO Pprogrammieren will und Klassen erstellt.
 
Der ursprüngliche Gedanke war, ein Würfelspiel zu programmieren, bei dem 2 Spieler anfangs 0 Punkte haben.

Je nach dem welche Augenzahl sie würfeln, sollen die Punkte um die Augenzahl erhöht werden.

Wird eine 6 gewürfelt, passiert folgendes:
Würfelt Spieler1 eine 6, werden seine Punkte auf den Rückfallwert (anfangs 0) zurückgesetzt.
Zugleich kann Spieler 2 entscheiden, ob er einmal aussetzt - dafür wird sein Rückfallwert auf seinen aktuellen Punktestand geändert - oder normal weiterspielt.
Das ganze funktioniert natürlich auch umgekeht (wenn Spieler 2 eine 6 würfelt)



Dafür muss ich ja auf die Punktezahl (die außerhalb der Methode ErhöheUmAugenzahl() bzw. SonderfallZahl6() ) zugreifen können.

Oder kann ich das anders realisieren?
 
was auch immer du machen willst, übergib keine primitiven Datentypen sondern Objekte, z.b. unschön aber einfach ein int-Array der Länge 1,
es kann dann genauso die Array-Variable an sich nicht geändert, kein neues Array zugewiesen werden, aber das vorhandene GEÄNDERT werden,
array[0] war vorher 5, wird auf 10 gesetzt und das sieht der Aufrufer dann auch, es gibt ja keine unterschiedlichen Sichten auf ein Array
 
Hallo,

so gehts:

Java:
int a = 5;
a=CallByReference(a)
System.out.println(a) // Hier soll der durch die Methode veränderte Wert rauskommen, in meinem Beispiel 15;
 

Zurück
Oben