Wert von Variablen

Hunter12

Mitglied
Hallo,
ich bin neu hier und habe bzw. lerne karelJ ne Java Vereinfachung. Gerade habe ich mir folgende Aufgabe mit Lösung angeschaut:

Betrachten Sie das folgende Programm genau. Nehmen sie an, dass mit Tester test = new Tester
(42, 23); eine Instanz dieser Klasse angelegt wird und anschließend mit test.m(); aufgerufen wird.
Welchen Wert haben die einzelnen Attribute von test nach dem Ende des Aufrufs?
Java:
class Tester {
 int x, y, z;
 Tester(int a, int z) {
      x = a;
      y = z;
      z = x + y;
 }
 void m() {
     int v = 19;
     int w = 19;
     int x = 19;
     v = f(3) * z;
     w = y / x - f(f(z + x));
     x = x + f(y);
     y = x - v;
     z = f(v) - f(w) + f(z);
}

 int f(int x) {
     return z / y + x;
 }
}
Man soll sagen welchen Wert die Variablen x, y und z haben. Laut Lösung, in der leider keine Erklärung steht, erhält man folgende Werte:
x = 42
y = 42
z = 18

ich versteh leider nicht wie diese Werte zustande kommen und man genau diese Werte erhält :-(
Es wäre nett wenn mir das jemand erklären kann.
Danke schonmal.
 
Zuletzt bearbeitet:

Hunter12

Mitglied
Java:
class Tester {
  int x, y, z;
  Tester(int a, int z) {
     x = a;
     y = z;
     z = x + y;
  }
  void m() {
     int v = 19;
     int w = 19;
     int x = 19;
     v = f(3) * z;
     w = y / x - f(f(z + x));
     x = x + f(y);
     y = x - v;
    z = f(v) - f(w) + f(z);
  }

  int f(int x) {
     return z / y + x;
   }
}
 

HimBromBeere

Top Contributor
Fangen wir mal an: den Ausruck
Java:
Tester test = new Tester(42, 24);
nennt man Variablendeklaration (mit Initialisierung). D.h. es wird wie in der Aufgabe beschrieben eine neue Variable test vom Typ Tester angelegt, welcher die beiden Werte 42 und 23 übergeben werden. Schauen wir uns den zugehörigen Konstruktoraufruf (so heißt dann die "Methode", die ausgeführt wird, wenn du eine neue Instanz erstellst) an, so finden wir
Java:
Tester(int a, int z){...}
.
Hier wird dem Programm mitgeteilt, dass zwei Integer-Eingangsparameter benötigt werden, um ein solches Objekt erstellen zu können (in deinem Fall also 42 und 23). Diese werden werden anschließend in der Instanz selbst gespeichert iin sog. Instanzvariablen, also Variablen, die genau zu diesem einen Objekt gehören und innerhalb dieses Objektes überall sichtbar sind. Daher kann in anderen Funktionen, die die Klasse Tester bereitstell, auf diese Werte zugegriffen werden.

Am Bsp.:
Java:
Tester test = new Tester(42, 24);
-->erzeugt neues Objekt mit x = 42, y = 23, z = 42 + 23 = 65
Java:
test.m()
-->ruft eine Berechnungsfunktion auf:
Code:
f(3) = z / y +x = 65 / 42 + 23 = 24 (da Ganzzahloperation)
Code:
v (in der Funktion m()) wird demnach f(3) * 3 also 72 sein
w = y / x - f(f(z + x)) = 23 / 42 - f(f(65 + 42)) = 0 - f(f(117) = -f(46)

Meine Güte, langsam wird´s aufwendig.
So, weiter:

EDIT: Mir reicht´s, ich denke, da ich wahrscheinlich eh irgendwo ´n paar Flüchtigkeitsfehler drin habe, wirst du besser kommen, du setzt in deinem Programm einfach ein paar Haltepunkte und ziehst den Debugger zu Rate...
 
Zuletzt bearbeitet:

tagedieb

Top Contributor
Ohne dies jetzt gross getestet zu haben denke ich das der Konstruktor falsch ist.
In der letzten Zeite muss
Code:
this.z
verwendet werden. Sonst wird der Wert der lokalen und nicht der Instanzvariable zugewiesen.


Java:
 int x, y, z;
 Tester(int a, int z) {
      x = a;
      y = z;
      this.z = x + y;
 }
 

tagedieb

Top Contributor
Hab mir die Aufgabe nochmal genauers angeschaut. Wo hast du den diese Aufgabe gefunden und in welchem Kontext?

Mir scheint die Aufgabe eignet sich schlecht als Beispiel und gehoert eher in die Kategorie finde die 10 Fehler!!

Instanzvariablen werden durch lokale Variablen ueberschrieben.
- z wird gar nie initialsiert und bleibt 0
- in der Methode m() wird die Instanzvariable x durch einen Lokalvariable ueberschrieben (x = 19)
- Der einzige Wert von Belang im Konstruktor ist y.
- Methode f(): da z = 0 ist ergibt auch das Ergebnis der Division 0. Somit wird immer der Wert der lokalen Variable x zurueckgeliefert. Die f() Methode kann also ignoriert werden weil f(x) = x

Java:
    int x = 42; // wird in Methode m() nicht verwendet, da sie ueberschrieben wird
    int y = 23;
    int z = 0;
	void m() {
		int v = 19;
		int w = 19;
		int x = 19;
		v = f(3) * z; // 3 * 0 = 0
		w = y / x - f(f(z + x)); //  23 / 19 - (0 + 19) = 1 - 19 = -18
		x = x + f(y); // 19 + 23 = 42
		y = x - v; // 42 - 0 = 42
		z = f(v) - f(w) + f(z); // 0 - -18 + 0 = 18
	}
 

Hunter12

Mitglied
Hallo, erstmal danke für die Antworten. DIe Aufgabe habe ich von hier:

Übungen - AI1-11 - TWiki

Uebung 12 Aufgabe 4 (Scope von Variablen).
Ich habe leider noch nicht ganz verstanden warum z = 0 ist, da doch z als eine int Objektvariable ganz oben deklariert wurde und im Konstruktor wird Die Summe aus x und y doch in dieser Variablen z gespeichert. Wenn man jetzt ein Objekt durch diesen Konstruktor aufruft ist dann nicht z = 42 +23?
Warum kann die Methode m() dieses z nicht verwenden?
 

HimBromBeere

Top Contributor
[JAVA=3]Tester(int a, int z) {
x = a;
y = z;
z = x + y;
}[/code]
Hier steckt das Problem. Du weist in der letzten Zeile deines Konstruktors nicht der Instanzvariablen
Code:
z
einen Wert zu, sondern der Parametervariablen
Code:
z
. Da beide den selben Namen haben, nimmt der Compiler immer die Referenz mit dem kleinst möglichen Geltungsbereich (hier also die Parametervariable
Code:
z
). Um diesen Konflikt zu lösen, musst du vor
Code:
z =
ein
Code:
this.
schreiben, um damit auszudrücken, du möchtest
Code:
z
des Objektes und nicht der Methode verwenden (
Code:
this
ist eine Referenz auf das Objekt, in welchem du dich gerade befindest).
Also muss die letzte Zeile lauten: [JAVA=6]this.z = x + y;[/code]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
I Variablen Wert fest speichern Java Basics - Anfänger-Themen 3
R Variablen Variablen übernehmen Wert nicht Java Basics - Anfänger-Themen 2
M Wert von globalen Variablen über eine Methode ändern Java Basics - Anfänger-Themen 8
J Threads Variablen Wert aus anderer Klasse auslesen Java Basics - Anfänger-Themen 4
X OOP Getter/Setter überschreiben den Wert ihrer Variablen nicht Java Basics - Anfänger-Themen 4
J Wie behalten Variablen den Wert, den sie in einer anderen Methode erhalten haben? Java Basics - Anfänger-Themen 14
T Variablen haben null Wert in try-Anweisung Java Basics - Anfänger-Themen 4
B Variablen Wert zuweisen aus jTextField Java Basics - Anfänger-Themen 9
M OOP frage, private variablen default-wert zuweisen sinnvoll? Java Basics - Anfänger-Themen 5
Linad Warum muss man Variablen einen Wert zuweisen? Java Basics - Anfänger-Themen 5
G Variablen werden leer ausgelesen (Wert wurde zugewiesen) Java Basics - Anfänger-Themen 5
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
J Wert in Dropdown Menü kursiv schrieben Java Basics - Anfänger-Themen 19
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
G Input/Output getText() gibt keinen Wert! Java Basics - Anfänger-Themen 13
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
B Map<String, FilterMeta, wie Wert bekommen? Java Basics - Anfänger-Themen 4
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
1 Array nimmt falschen Wert auf! Java Basics - Anfänger-Themen 2
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
J Umwandlung String zu ASCII-Wert und anders Java Basics - Anfänger-Themen 17
P Verzweigungen Wert zurück geben Java Basics - Anfänger-Themen 2
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
F Boolean Methode Wert ausgeben. Java Basics - Anfänger-Themen 2
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
L Wert einer Webeseiteauslesen Java Basics - Anfänger-Themen 6
D Erste Schritte Wert im Array suchen Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
S Wert innerhalb eines anderen Wertes Java Basics - Anfänger-Themen 3
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
O Wert in einer Schleife unterschiedlich erhöhen Java Basics - Anfänger-Themen 2
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
F Java int-Wert wird resetet Java Basics - Anfänger-Themen 21
J Erste Schritte Wert aus JTextField zurückgeben Java Basics - Anfänger-Themen 6
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
J Wert bei Objekterzeugung verändern Java Basics - Anfänger-Themen 12
I bestimmten Wert eines Arrays Java Basics - Anfänger-Themen 23

Ähnliche Java Themen


Oben