Java / inkrement / ergebnis = ++zahl + -++zahl

folgendes Problem:

int zahl = 1;
int ergebnis = ++zahl * zahl++ + -++zahl;
System.out.println(zahl);
System.out.println(ergebnis - (-2));

Ausgabe:
Zahl: 4
Ergebnis: 2

int zahl = 1;
int ergebnis = zahl++ * ++zahl + ±-zahl;
System.out.println(zahl);
System.out.println(ergebnis + „-6“);

Ausgabe:
Zahl: 2
Ergebnis: 5-6

  1. Frage:
    warum erhalte ich bei der Ausgabe „Ergebnis“ 2 und die 5-6.

  2. Frage:
    was genau passiert bei -++zahl und ±-zahl ???

  3. Frage:
    int zahl = 1;
    int ergebnis = ++zahl + -++zahl;

Ausgabe:
Zahl: 3
Ergebnis: -1 —> WIESO -1 ???

würde mich auf eine Antwort wirklich sehr sehr freuen…

Hi.

Nur kurz folgende Info: Die Reihenfolge der Operatoren ist hier wichtig und auch deren Priorität. Zum einen das ganz normal „Multiplikation vor Addition“. Zum anderen hat in Java der Preinkrement-Operator (++Zahl) und der Postinkrement-Operator auch höhere Priorität als Multiplikation. Zu guter letzt erhöht der Preinkrement-Operator die Zahl VORHER und der Postinkrement-Operator die Zahl NACHHER.

Ich denke diese Infos sollten langen um die Formeln nachzuvollziehen. Vielleicht einfach mal mit Papier und Bleistift die einzelnen Schritte sich klar machen.

Tom

Hallo emrematrix,

int zahl = 1;
int ergebnis = ++zahl * zahl++ + -++zahl;

// Das ist äquivalent zu:
int zahl = 1;
int faktor1 = ++zahl; // faktor1 == 2 && zahl == 2
int faktor2 = zahl++; // faktor2 == 2 && zahl == 3
int summand = -(++zahl); // summand == -4 && zahl == 4
int ergebnis = faktor1 * faktor2 + summand; // == 2*2 - 4 == 0

System.out.println(ergebnis - (-2));

Hier wird die Zahl `ergebnis + 2 == 2’ ausgegeben.

int zahl = 1;
int ergebnis = zahl++ * ++zahl + ±-zahl;

// Das ist äquivalent zu:
int zahl = 1;
int faktor1 = zahl++; // faktor1 == 1 && zahl == 2
int faktor2 = ++zahl; // faktor2 == 3 && zahl == 3
int summand = +(–zahl); // summand == +2 && zahl == 2
int ergebnis = faktor1 * faktor2 + summand; // == 1 * 3 + 2 == 5

System.out.println(ergebnis + „-6“);

Hier findet keine arithmetische Berechnung mehr statt, sondern es wird `int ergebnis’ in den String „5“ umgewandelt und der dann (textuell!) mit dem String „-6“ verkettet. So wie "Hello " + „World!“ den String „Hello World!“ ergibt.

was genau passiert bei -++zahl und ±-zahl ???

++ bzw. – ist der (Präfix-) In- bzw. Dekrement-Operator, der `zahl’ erhöht bzw. erniedrigt und den bereits veränderten Wert zurückliefert, siehe z.B. §2.4.5 von Java ist auch eine Insel (10. Auflage).
Das - bzw. + davor ist ein unärer Vorzeichenoperator. - wechselt das Vorzeichen, + macht effektiv nichts (siehe §2.4.3)

int zahl = 1;
int ergebnis = ++zahl + -++zahl;

// Das ist äquivalent zu:
int zahl = 1;
int summand1 = ++zahl; // summand1 == 2 && zahl == 2
int summand2 = -(++zahl); // summand2 == -3 && zahl == 3
int ergebnis = summand1 + summand2; // == 2 + (-3) == -1

Schöne Grüße,

Manfred

Super, herzlichen Dank an euch alle, echt super freu mich :smile:

Hallo,

würde mich auf eine Antwort wirklich sehr sehr freuen…

die Unterschiede liegen an der unterschiedlichen Präzedenz der Operatoren, d.h. der Reihenfolge in der diese abgearbeitet werden, sowie dem Zeitpunkt zu dem Zuweisungen ausgeführt werden.

Wirf einen Blick auf:

http://openbook.galileocomputing.de/javainsel/javain…

insbesondere auf die Kapitel 2.4.5 sowie 2.4.9 - dort findest du alles erklärt was du benötigst.

Viel Erfolg!

Hallo,

also ich werde dir nicht unbedingt deine Fragen beantworten, aber Hinweise zum Nachdenken.

Es gibt für das Inkrement das Präfixinkrement und das Postfixinkrement ( gilt auch für dekrement)
Präfix bedeutet die Operatoren vor der Variable also:
++zahl
Postfix Operatoren nach der Variable:
zahl++

Der Unterschied ist bei Präfix wird erst erhöht und dann der Wert der variable geliefert und bei Postfix wird erst der wert geliefert und dann erhöht:
So liefert:

int zahl = 1;
System.out.println(zahl++); // Ausgabe = 1 und nach der Ausgabe ist die Variable dann 2

Hingegen:
int zahl = 1;
System.out.println(++zahl); // erst erhöht und dann Ausgabe = 2

Ist ein dritter Operator im Bunde wird die Sache zur Verknüpfung mit dem vorherigen Ausdruck herangezogen:
int zahl = 1;
System.out.println(10 + -++zahl); // ergibt 8 da 10 + (-(zahl + zahl))

Dann muss man wissen das die Systemausgabe mit Strings arbeitet. Also wird nicht wirklich die Zahl ausgegeben sondern der umgewandelte String.
int zahl = 1;
System.out.println(zahl + „-6“); // zahl in String verwandelt und zusammen mit String „-6“ dargestellt.

So, nun solltest du alles haben, um deine Fragen selbst beantworten zu können. Wenn nicht, noch mal melden. Wichtig ist es aber, es wirklich erst selbst zu versuchen, da sonst kein Lerneffekt.

Torsten

Zum Thema Prä und Post-Inkrement/Dekrement kannst du hier nachlesen
http://openbook.galileocomputing.de/javainsel/javain…
++zahl, zahl++, --zahl, zahl-- sind festgelegte Operatoren, der von dir ausgedachte ±- bzw. -++ könnte zu unvorhersehbaren/unlogischen Ergebnissen führen, weil nicht definiert, es sei denn, du hast eine entsprechende Funktion geschrieben…
Und wozu hast du das Ganze geschrieben? Inkrementoren und Dekrementoren haben ihre Funktionen in Schleifen, um Variablen im Wert zu verändern.

Gruß
Michael

Hallo,

folgendes Problem:

int zahl = 1;
int ergebnis = ++zahl * zahl++ + -++zahl;
System.out.println(zahl);
System.out.println(ergebnis - (-2));

Ausgabe:
Zahl: 4
Ergebnis: 2

int zahl = 1;
int ergebnis = zahl++ * ++zahl + ±-zahl;
System.out.println(zahl);
System.out.println(ergebnis + „-6“);

Ausgabe:
Zahl: 2
Ergebnis: 5-6

  1. Frage:
    warum erhalte ich bei der Ausgabe „Ergebnis“ 2 und die 5-6.

Weil du die Zahl vor oder nach dem Zugriff hochzählst:
z++ : lies die Zahl aus und erhöhe sie anschließend.
++z: eröhe die zahl und lies sie dann aus.
Mehr Infos: http://openbook.galileocomputing.de/javainsel/javain…

zu „5-6“: Du lässt dir das Ergebnis ausgeben und addierst nicht etwas -6, sondern hängst den String „-6“ hinten dran. Wenn du das Ergebnis von 5-6 haben willst, musst du schreiben: System.out.println(ergebnis-6);

  1. Frage:
    was genau passiert bei -++zahl und ±-zahl ???

„- ++zahl“ heißt: „- (1+ zahl)“ und „+ --zahl“ heißt „+ (zahl-1)“
und „- zahl++“ heißt: „-zahl; wenn du fertig mit der rechnung bist, rechne außerdem ‚zahl = zahl + 1‘“

  1. Frage:
    int zahl = 1;
    int ergebnis = ++zahl + -++zahl;

Ausgabe:
Zahl: 3
Ergebnis: -1 —> WIESO -1 ???

ergebnis = ++zahl + -++zahl;
nach Frage 2:
++zahl = (zahl+1)
Also:
ergebnis = (1+1) + -(2+1) = 2 + -3 = -1
Im 1. inkrementierst du zahl sofort, deswegen ist es im zweiten Summanden schon 2.

würde mich auf eine Antwort wirklich sehr sehr freuen…

Ich hoffe, ich konnte dir helfen.

Gruß

tincian

Moin,

++zahl erhöht den Wert von zahl VOR der Auswertung um 1, zahl++ erhöht den Wert von zahl NACH der Auswertung um 1
=>
zahl = 1
ergebnis = 2* 2 - 4 = 0
0 - (-2) = 0+2 = 2
weitere Infos siehe unten.

LG
Thomas

folgendes Problem:

int zahl = 1;
int ergebnis = ++zahl * zahl++ + -++zahl;
System.out.println(zahl);
System.out.println(ergebnis - (-2));

Ausgabe:
Zahl: 4
Ergebnis: 2

int zahl = 1;
int ergebnis = zahl++ * ++zahl + ±-zahl;
System.out.println(zahl);
System.out.println(ergebnis + „-6“);

ergebnis = 1 * 3 + 2 = 5

Ausgabe:
Zahl: 2
Ergebnis: 5-6

  1. Frage:
    warum erhalte ich bei der Ausgabe „Ergebnis“ 2 und die 5-6.

  2. Frage:
    was genau passiert bei -++zahl und ±-zahl ???

Normale Addition / Subtraktion nach in-/dekrementieren von Zahl um 1.

  1. Frage:
    int zahl = 1;
    int ergebnis = ++zahl + -++zahl;

2 - 3 = -1

Ausgabe:
Zahl: 3
Ergebnis: -1 —> WIESO -1 ???

würde mich auf eine Antwort wirklich sehr sehr freuen…

Weiß ich leider nicht. Gibt es keine Fehlermeldung bei „+ ±-zahl“?

  1. Solchen Code sollte niemand schreiben, da er für jeden schwer nachvollziehbar ist.
  2. Wenn Dich interessiert, wie die Werte zustande kommen, lasse Dir einfach Zwischenergebnisse ausgeben.

Hier einige Antworten:
-++zahl
ist das gleiche wie
-(++zahl)
d.h. erhöhe zahl um 1 (und speichere das Ergebnis in zahl) und danach negiere den Wert.

±-zahl
ist das gleiche wie
+(–zahl)
ist das gleiche wie
–zahl
weil das zusätzliche Vorzeichen ‚+‘ nichts ändert