Variablenübergabe

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo ich habe diese Programmteile kann mir mal jemand erklären wie ich die Parameterübergabe erkläre??
beim Aufruf der Funktionen f1(i),f2(k)

Code:
00 class Foobar{
01 public static void f1(int j){
02 j = 3;
03 } //f1
04 public static void f2(MyInt l){
05 MyInt newInt = new MyInt(4);
06 l = newInt;
07 } //f2
08 public static void main(String[] args){
09 int i = 1;
10 MyInt k = new MyInt(2);
11 f1(i);
12 System.out.println(i);
13 f2(k);
14 System.out.println(k.toString());
15 } //main
16 } //Foobar
Code:
class MyInt{
01 private int cont = 0;
02
03 public MyInt(){
04 cont = 0;
05 } //Konstruktor parameterlos
06
07 public MyInt(int x){
08 cont = x;
09 } //Konstruktor
10
11 public String toString(){
12 return "" + cont;
13 } //toString
14 } //MyInt

Die Ausgabe is ja 1,2

Danke
 

mic_checker

Top Contributor
Was gibts da großartig zu erklären?

Code:
f1(i]

Du änderst nichts an dem Wert der Variablen i in public static void main, die Variable j ist in f1 sichtbar und hat nach deiner Anweisung den Wert 3. Nicht aber i in main.

Code:
f2(k);
In f2 hat l den Wert von newInt, also 4. Aber das bezieht sich nur auf diese Methode. An dem Wert in main ändert sich nichts.
 

mic_checker

Top Contributor
Wenn du tatsächlich die Werte verändern willst, so könntest du es z.B. so machen:

Schreib dir in MyInt.java zwei Zugriffsmethoden auf cont:

Code:
	public void setCont(int x)
	{
		cont = x;
	}
	
	public int getCont()
	{
		return cont;
	}

Die eine Methode gibt den Wert zurück,mit der andern kannst du den Wert setzen (ist notwendig weil cont private ist).

Wenn du in f2 nun den Wert verändern willst, könntest du es so machen:

Code:
	public static void f2(MyInt l)
	{
		MyInt newInt = new MyInt(4);		
		l.setCont(newInt.getCont());
	}

Liegt an "Call by Value"....
 
G

Guest

Gast
Undiwe kann ich die Variablenübergabe mal graphisch darstellen?also irgendwie mit pfeilen für die zuweisungen und an die pfeile die Programmzeile die jeweilige???
 

mic_checker

Top Contributor
Sagen wir MyInt ist als Kästchen dargestellt , in welchem ein Feld mit der Beschriftung "cont" und dem entsprechenden Wert ist.

Bei der zweiten Variante kannst du in der Methode einen Pfeil auf das Feld der Referenz machen, so dass du andeutest das du den Wert veränderst.

In den andern Fällen kannst du seperate Kästchen machen, die andeuten das die Werte der Original Referenz nicht verändert werden.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben