Werte von Variablen über Methode ändern

DDyrdek1992

Mitglied
Hallo,

Meine Frage ist, wie kann ich zwei Werte aus meiner main-Methode in einer aufgerufenen Klassenmethode ändern? Im folgenden Quellcode werden in der main-Methode zwei Variablen initialisert und sollen in einer Methode vertauscht werden. Die Werte werden innerhalb der Methode aber nur lokal vertauscht und die Variablen der main-Methode behalten ihre Werte. Man könnte die Aufgabe aus dem Quellcode auch anders lösen, aber mich interessiert ob ich irgendwie die beiden Variablen wirklich über eine Methode verändern kann. return von zwei Werten geht ja nicht.

Danke schonmal für jede Hilfe!

Java:
static void tausche (int a, int b) {
// vertauscht a und b
int c = a;
a = b;
b = c;
}
public static void main (String[] args) {
int x = 4, y = 0;
if (y == 0) tausche(x,y);
x = x / y;
}
 

stg

Top Contributor
Kurz: Gar nicht, weil in Java alle Aufrufe "by Value" stattfinden.

Du musst dir heirfür leider einen Workaround basteln und zum Beispiel die Werte in einen mutable Datentyp (die Wrapper sind immutable, da bekommst du also das gleiche Problem!) packen und diesen dann übergeben. Dann kannst du zwar auch nicht die übergebenen Container tauschen, aber deren Inhalt.
 
Zuletzt bearbeitet:

SilverClaw

Aktives Mitglied
Mir erschleßt sich der Sinn der Methode nicht ganz...du willst also z.B. die Werte von 5 und 3 tauschen und deine Methode tauscht die Speicheraddresen dafür....da könntest du doch genau so gut einfach die Zahlen anders herum hinschreiben. Oder hab ich was verpasst? :oops:

Sinnvoll wäre das eher, wenn die Zahlen z.B. in einem Array an bestimten stellen stehen. Dann könntest du auch als Parameter den Array übergeben und die Methode tauscht die Positionen und das bleibt dann auch so.
 

DDyrdek1992

Mitglied
Zur Erklärung vielleicht war das eine Aufgabe in der man einen Laufzeitfehler erkennen sollte. Mir war klar dass das so nicht funktionieren konnte, wollte aber wissen ob man allgemein die Variablen hier über eine Methode ändern könnte. Also es geht jetzt nicht speziell um dieses Beispiel :)
 

husox123

Mitglied
Man kann wohl die Werte von Variablen über Methoden ändern. Allerdings sollte es mit bedacht machen.
Es stimmt, dass Java mit Call-By-Value Verfahren arbeitet bis auf Referenz-Datentypen, zu dem auch die Array zählen. Also wenn du die beiden Variablen als Array übergibst, werden die Adressen übergeben und somit alle Veränderungen auf der tatsächlichen Adressen statt finden. Damit bekommst du den Effekt, den du haben wolltest, aber unschön.
 

husox123

Mitglied
Java arbeitet IMMER mit Call-By-Value, ohne Ausnahme. Man muss nur verstehen, was das bedeutet. Man übergibt nämlich den Methoden keine Objekte, sondern nur Referrenzen auf diese, und zwar By-Value.

Also wenn man Referenzen über gibt, arbeitet man auch mit Call-By-Value. Stimmt. Was aber heißt, dass Java eine Kopie von der übergebenen Referenz erstellt, was bei Arrays der Fall ist. Diese werden als Referenz übergeben und beziehen sich daher immer auf das Original-Objekt. Wird das übergebene Objekt manipuliert, so ändert sich auch der Zustand des Originals. Wenn ich falsch liege, dann korrigiert mich bitte. :rtfm:
 

Anti-Banane

Gesperrter Benutzer
ja .. du liegst falsch

in java sind arrays letzten endes auch nur mutable objekte

call-by-value bedeutet in java das die adresse auf die eine referenz zeigt kopiert und übergeben wird

ergo : wenn man ein "array" übergibt wird lediglich die adresse auf die die referenz zeigt kopiert und übergeben
das heißt also das es dann keine zwei arrays gibt die auf magische weise mit ein ander synchronisiert werden sondern lediglich zwei stellen im stack die als speicher-adresse makiert sind und auf den selben speicher-bereich verweisen

die aussage "Wird das übergebene Objekt manipuliert, so ändert sich auch der Zustand des Originals." ist in sofern falsch das es eben dieses "übergeben objekt" schlicht nicht gibt sondern die übergebene kopie der referenz auf das einzige bestehende (und damit im kontext der aussage "originale") objekt zeigt
 

husox123

Mitglied
ja .. du liegst falsch

in java sind arrays letzten endes auch nur mutable objekte

call-by-value bedeutet in java das die adresse auf die eine referenz zeigt kopiert und übergeben wird

ergo : wenn man ein "array" übergibt wird lediglich die adresse auf die die referenz zeigt kopiert und übergeben
das heißt also das es dann keine zwei arrays gibt die auf magische weise mit ein ander synchronisiert werden sondern lediglich zwei stellen im stack die als speicher-adresse makiert sind und auf den selben speicher-bereich verweisen

die aussage "Wird das übergebene Objekt manipuliert, so ändert sich auch der Zustand des Originals." ist in sofern falsch das es eben dieses "übergeben objekt" schlicht nicht gibt sondern die übergebene kopie der referenz auf das einzige bestehende (und damit im kontext der aussage "originale") objekt zeigt

Ich glaube, dass du die Aussage falsch verstanden hast. genau das was du sagst, beschreibe ich auch. und sie ist Richtig. Die Referenz wird kopiert und die Kopie der Referenz zeigt auf das selbe Object. Und somit finden alle Veränderungen auf dem originalen Objekt. "Hier sind die Arrays gemeint." Ich habe nirgendwo erwähnt, dass das Array kopiert wird. Ich gebe zu das folgende erweckt Missverständnis.

"Wird das übergebene Objekt manipuliert, so ändert sich auch der Zustand des Originals"

Damit ist nicht eine Kopie gemeint.
 
Zuletzt bearbeitet:

ceving

Aktives Mitglied
Meine Frage ist, wie kann ich zwei Werte aus meiner main-Methode in einer aufgerufenen Klassenmethode ändern?

Mit einem Wert wie einem
Code:
int
geht das nicht. Du musst ein sog. Boxing und Unboxing machen. Du brauchst also zwei Kisten für deine beiden "int"s und kannst an "tausche" die beiden Kisten übergeben. "tausche" ist dann in der Lage den Inhalt der beiden Kisten zu tauschen. Die Kisten selber kann "tausche" auch nicht vertauschen wie andere ja schon erläutert haben (Call by value).

Beispiel:
Java:
class tausche
{
  static class Int
  {
    int value;
    Int (int value) { this.value = value; }
    boolean equal (int i) { return this.value == i; }
    void div (Int other) { value = this.value / other.value; }
    void dump (String label) {
      System.out.println (label + ": " + String.valueOf(value));
    }
  }

  static void tausche (Int a, Int b) {
    // vertauscht a und b
    int c = a.value;
    a.value = b.value;
    b.value = c;
  }

  static void println (String str) { System.out.println (str); }

  public static void main (String[] args) {
    Int x = new Int(4), y = new Int(0);
    x.dump ("x"); y.dump ("y");
    //if (y == 0) tausche(x,y);
    //x = x / y;
    if (y.equal(0)) tausche (x, y);
    x.dump ("x"); y.dump ("y");
    x.div (y);
    x.dump ("x"); y.dump ("y");
  }
}

Da man in Java keine Operatoren überladen kann, müssen alle Operationen (hier == und /), die für die Werte definiert waren für die Boxen neu programmiert werden. Etwas ähnliches macht Java bereits bei dem Objekt-Typ Integer. Insbesondere findet für Integer sogar ein Auto-Boxing statt.
 

Anti-Banane

Gesperrter Benutzer
"Wird das übergebene Objekt manipuliert, so ändert sich auch der Zustand des Originals"

sorry .. aber für mich sind DAS zwei objekte "das übergebene" und "das original" ... wobei es eben "das übergebene objekt" halt nicht gibt da wie du schon richtig gesagt hast die referenz eh auf das "original" zeigt ... und es damit halt nur EIN objekt gibt


der sinn deiner aussage mag richtig sein ... wie du es allerdings ausgedrückt hast klingt irgendwie ziemlich schwammig
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
S OOP Werte von Vektoren mit 3 Variablen ausgeben lassen Java Basics - Anfänger-Themen 3
M XML String Werte als Variablen speichern Java Basics - Anfänger-Themen 4
K Einer Variablen Werte von anderen Variablen zuweisen Java Basics - Anfänger-Themen 5
S Char Array Werte in short variablen speichern Java Basics - Anfänger-Themen 4
M Variablen Werte werden nicht übernommen Java Basics - Anfänger-Themen 4
C Aus einer *.csv Datei bestimmte Werte Variablen zuweisen Java Basics - Anfänger-Themen 19
bernd Werte einer Variablen auslesen! Java Basics - Anfänger-Themen 4
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
F 2x 16bit Werte zu einem 32bit und dann splitten mit 0xb Java Basics - Anfänger-Themen 1
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum sind Werte in den Feldern ? Java Basics - Anfänger-Themen 2
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
docmas 2DArray Werte werden nur untereinander ausgegeben Java Basics - Anfänger-Themen 1
M Nur int-Werte erlauben Java Basics - Anfänger-Themen 11
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
Igig1 Wie lasse ich dir Werte in einem Array zusammenrücken? Java Basics - Anfänger-Themen 4
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
J Methoden Positive Werte zählen Java Basics - Anfänger-Themen 3
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
H OOP Werte mit Set verändern Java Basics - Anfänger-Themen 6
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
H Welche Werte bei Objekterzeugung eingeben? Java Basics - Anfänger-Themen 2
M Von einem Menü Methode aus anderer Klasse ausführen, die errechnete Werte in Datei schreibt. Java Basics - Anfänger-Themen 8
sashady ursprüngliche Array-Werte bei erneutem Aufruf? Java Basics - Anfänger-Themen 7
cmn489 Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist) Java Basics - Anfänger-Themen 1
E In Array Werte einfügen? Java Basics - Anfänger-Themen 5
HighLife Bestimmte Werte aus Array zählen Java Basics - Anfänger-Themen 15
L Methoden ArrayList Werte hinzufügen und löschen Java Basics - Anfänger-Themen 32
J Zufallszahlen generieren und Werte vergleichen Java Basics - Anfänger-Themen 3
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
R Werte und Reihenfolge in 2d Arrays vergleichen Java Basics - Anfänger-Themen 5
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
eleonori Durchschnitt aller Werte eines Baums berechnen Java Basics - Anfänger-Themen 5
G Array Werte addieren Java Basics - Anfänger-Themen 4
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
C Array-Werte werden gemischt, ohne Logik Java Basics - Anfänger-Themen 2
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
C Zufallszahl + Werte bereich einstellen Java Basics - Anfänger-Themen 2
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
L 2 Dimensional Array werte überschreiben Java Basics - Anfänger-Themen 1
K Array alle Werte aufsummieren und ausgeben Java Basics - Anfänger-Themen 6
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
Rubberduck Combobox-Werte in GUI anzeigen Java Basics - Anfänger-Themen 13
J Neue Werte in ein Array hinzugeben Java Basics - Anfänger-Themen 8
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
A Negative float Werte? Java Basics - Anfänger-Themen 10
Kirby.exe Fehlende Int Werte aus Array mit streams finden Java Basics - Anfänger-Themen 19
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
F Character umwandeln als Double Werte Java Basics - Anfänger-Themen 8
B Werte aus einem Unterprogramm in ein Array schreiben Java Basics - Anfänger-Themen 2
L Nur Bestimmte Werte aus einem Array in ein anderes Speichern Java Basics - Anfänger-Themen 11
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
S Werte aufsummieren in java? Java Basics - Anfänger-Themen 5
M Werte des Arrays addieren Java Basics - Anfänger-Themen 5
A Alle true Werte eines boolean Arrays herausfiltern Java Basics - Anfänger-Themen 19
C System.in.read() Boolsche Werte vergleichen Java Basics - Anfänger-Themen 8
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
D Werte aus einem BinärBaum in einem Array speichern Java Basics - Anfänger-Themen 1
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
E Eigenschaften Werte, in einer anderen Klasse, zuweisen Java Basics - Anfänger-Themen 40
H Methoden Nutzung der Werte einer ausgeführten Objektmethode in anderen Objektmethoden Java Basics - Anfänger-Themen 2
O Map Werte Java Basics - Anfänger-Themen 2
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
L Werte zufällig aus Array zurückgeben Java Basics - Anfänger-Themen 15
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
S werte von objekten in schleife verändern Java Basics - Anfänger-Themen 14
R Vererbung werte von einem Objekt aus ein anderes übertragen Java Basics - Anfänger-Themen 7
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
L Bestimmte Werte eines Arrays ausgeben. Java Basics - Anfänger-Themen 3
Hanschyo String kann nicht Werte von Long annehmen Java Basics - Anfänger-Themen 2
A Sortieren ausgerechneter Werte aus einer TXT Datei Java Basics - Anfänger-Themen 8
S Werte in Klasse übergeben Java Basics - Anfänger-Themen 12
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
S Werte in Liste mit Nachfolger vergleichen Java Basics - Anfänger-Themen 5
M Vererbung Konstruktoren mit festen Werte Java Basics - Anfänger-Themen 2
C Werte im Vector in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 14
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
L Gleiche Werte aus Array aussortieren Java Basics - Anfänger-Themen 5
L Gleiche Werte im Array hochzählen Java Basics - Anfänger-Themen 4
C Matrix-Werte werden nicht wie erwartet ausgegeben Java Basics - Anfänger-Themen 7
V Warum speichert meine String-Variable nummerische Werte? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben