package ausarbeitung;
public class Ausarbeitung
{
public static void main(String[] args)
{
int x, a=5;
x = a * a++ * ++a;
System.out.println(x);
}
}
Ich weiß, dass man so niemals programmieren würde; Trotzdem versuche ich mich an der Ausgabe.
Meine Ideen:
Folgendes Vorgehen:
Ich sehe mir die Zeile an, Inkrement-Operator hat eine höhere Priorität als das * - Zeichen. Da ich zwei Inkrement - Operatoren in meiner Zeile habe, erfolgt die Assoziativität von rechts. Also wird das ++a auf 6 gesetzt, somit ist a=6.
Also steht als Ausdruck:
code:
1:
x = a * a++ * 6;
Als nächstes ist dann a++ dran, hier müsste aber a auf 6 bleiben, da es Postinkrement ist.
Also habe ich:
code:
1:
x = a * 6 * 6;
Und erst jetzt wird a = 7;
Somit wäre die letzte Zeile:
code:
1:
x = 7*6*6;
Als Endergebnis dann 252. Meine IDE sagt aber 175.
Daher meine Frage an Euch, wo habe ich hier einen Fehler?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 22.10.2015 05:58.
22.10.2015 05:57
SixFeetUnder unregistriert
Danke für die Rückmeldung
27.10.2015 05:48
SixFeetUnder unregistriert
Eine Frage noch:
Ich habe den folgenden Code:
code:
1:
int sum = -5*6*-9/4;
Hier wird doch das unäre Minus zuerst der 9 (Assoziativität rechts) zugeordnet, dann das unäre Minus der 5. Danach kommt die Multiplikation (Assiziativität links), sprich -5*6 = -30;
Danach -30*-9 = 270 und zuletzt dann 270 / 4 = 67 (da es zwei Integer - Zahlen sind).
Beim geteilt wird mit der Zerlegung begonnen. Das schreibt vor, erst die linke Seite abzuarbeiten, also das +.
Hier geht es wieder von links nach rechts, also erst das b erhöhen. Dann wird -(a++) addiert.