# Wieso kommt bei dieser Berechnung XX raus?



## Jariel (24. Nov 2010)

Hallo ich verzweifle momentan an der Logik der folgenden Berechnung:


```
public class blub {
	
		
	public static void main(String[] args) {
		 int x = 23;
		int[] y = { 23 };
		while (x < 333 && y[0] < 333) {
		x *= 3;
		 y[0] *= 3;
		 foo(x, y);
		x--;
		 y[0]--;
		 }
		 System.out.print("Werte: x=" + x + ", ");
		System.out.println("y=" + y[0] + ".");
		 }
		
		 public static void foo(int x, int[] y) {
		 for (int i = 4; i < 6; i++) {
	          x *= 3 * i - 2;
		 y[0] *= 3 * i - 2;
		 bar(x, y[0]);
		 }
		 }
		
		 public static int bar(int x, int y) {
		 x /= 2;
		 y /= 2;
		 return x;
		}
		}
```


Nun kommt x = 68 und y[0] = 8969 heraus, obwohl anscheinend beide Werte gleich berechnet wurden


also folgende Fragen:

1) Wieso wurde die Methode foo() bei der Berechnung von x nicht miteinbezogen? (nur so würde x = 68 in der main methode herauskommen oder?)

2) Bei der Berechnung von y[0] wurde foo() anscheinend miteinbezogen, aber bar() nicht mehr. (nur so würde y = 8969 herauskommen oder?) Wieso? Liegt es daran dass in bar() y statt y[0] benutzt wurde? Was wurde dann bei y /= 2 genau geteilt wenn nicht die erste Stelle im Array ( y[0] ) ?


----------



## XHelp (24. Nov 2010)

Ist wohl eine Übung zu CallByValue, CallByReference. Java kann nur CallByValue.
Läuft auf folgendes hinaus: du kannst das Objekt, welches du mit Parameter übergibst nicht überschreiben, aber den Inhalt des Objektes ändern.
int ist ein primitiver Datentyp, der wird nicht zurückwirkend verändert. Aber wenn du einen Eintrag im Array änderst, ändert er sich auch rückwirkend.
Aber zu den Stichpunkten kannst du bei google "genauere" Erklärung suchen


----------



## Jariel (24. Nov 2010)

Danke! Ich glaube ich verstehs jetzt.


----------

