Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Java-Frage Array, Übergabe in "Funktionen"

PingOfDeath / 5 Antworten / Baumansicht Nickles

Folgendes Problem:

Mein Programm sieht so aus (sehr grob ^^):

x(INT_Array);
y(INT_Array);

static void x(int [] INT_Array)
static void y(int [] INT_Array)

Ich übergebe also ein Array mit 4 Werten an Funktionen welche mir etwas ausrechnen - sie geben nur etwas aus nichts zurück (void).
Wenn ich jetzt vor und nach dem Aufruf von "x" mir "INT_Array[0]" ausgeben lasse kommt jedesmal etwas anderes raus --> somit arbeitet "y" mit falschen Werten!

Was mache ich da falsch) Warum ändern sich die Werte im Array welches ich immer übergeben möchte?

Gruß, PingOfDeath

bei Antwort benachrichtigen
mr.escape PingOfDeath „Java-Frage Array, Übergabe in "Funktionen"“
Optionen
Wenn ich jetzt vor und nach dem Aufruf von "x" mir "INT_Array[0]" ausgeben lasse kommt jedesmal etwas anderes raus
Anscheinend änderst du unbeabsichtigt den wert von "INT_Array[0]" in der methode "x()".
"INT_Array" ist zwar nur eine kopie des übergebenen arrays, aber eben nur die kopie des array-objekts, d.h. der referenz, sodass diese auf die selben inhalte verweisen.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
PingOfDeath mr.escape „ Anscheinend änderst du unbeabsichtigt den wert von INT_Array 0 in der methode...“
Optionen

"kopie des array-objekts, d.h. der referenz"
In der Funktion "x()" wird das Array durchaus umgeschrieben....

Wie muss ich es denn umschreiben das ich wirklich ein komplett neues Array erhalte welches nicht mehr im Bezug auf das zu übergebende Array steht?

Gruß, PingOfDeath

bei Antwort benachrichtigen
Borlander PingOfDeath „ kopie des array-objekts, d.h. der referenz In der Funktion x wird das Array...“
Optionen

Wenn das komplette Array überschrieben wird wird wäre es am einfachsten (und schnellsten), wenn Du in der Funktion einfach ein neues Array gleicher größe erstellst und nur noch in dieses schreibst ;-)

Ansonsten kannst Du mit INT_Array.clone() eine Kopie des Arrays erstellen.


Gruß
Borlander

bei Antwort benachrichtigen
mr.escape PingOfDeath „ kopie des array-objekts, d.h. der referenz In der Funktion x wird das Array...“
Optionen
Wie muss ich es denn umschreiben das ich wirklich ein komplett neues Array erhalte welches nicht mehr im Bezug auf das zu übergebende Array steht?
Du musst ein "deep-copy" erzeugen. Z.b.:
static void x(int [] INT_Array0){
  int[] INT_Array=INT_Array0.clone();
  ...


mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
PingOfDeath mr.escape „ Du musst ein deep-copy erzeugen. Z.b.: static void x int INT_Array0 int...“
Optionen

Danke Euch ;-)

Funktioniert wie gewünscht.

Gruß, PingOfDeath

bei Antwort benachrichtigen