Wieso kommt bei dieser Berechnung XX raus?

Jariel

Mitglied
Hallo ich verzweifle momentan an der Logik der folgenden Berechnung:

Java:
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] ) ?
 
Zuletzt bearbeitet:

XHelp

Top Contributor
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
 

Neue Themen


Oben