2010-03-03 6 views
57

Können Sie mir die Ausgabe dieses Java-Codes erklären?Wie funktionieren die Post Inkrement (i ++) und Pre Inkrement (++ i) Operatoren in Java?

int a=5,i; 

i=++a + ++a + a++; 
i=a++ + ++a + ++a; 
a=++a + ++a + a++; 

System.out.println(a); 
System.out.println(i); 

Der Ausgang ist 20 in beiden Fällen

+1

7 + 7 + 6 = 20. _____ – kennytm

+3

Vermeiden Sie immer mehrdeutige Anweisungen :) –

+7

@Prasoon Saurav Im Gegensatz zu C und C++ haben Java und C# streng definierte Reihenfolge der Auswertung, so dass diese Aussagen nicht mehrdeutig sind. –

Antwort

88

Hilft das?

a = 5; 
i=++a + ++a + a++; => 
i=6 + 7 + 7; (a=8) 

a = 5; 
i=a++ + ++a + ++a; => 
i=5 + 7 + 8; (a=8) 
+5

Sind Sie sicher a == 9 in der zweiten? –

+0

Sie haben recht, es ist nicht 9. Es ist 8. – kgiannakakis

+0

i = ++ a + ++ a + a ++; => i = 7 + 8 + 5; (a = 8) Da post increment die höchste Priorität hat, wird a ++ zuerst ausgeführt? – rsirs

7

++a Schritten a, bevor es ausgewertet wird. a++ wertet a aus und inkrementiert es dann.

im Zusammenhang mit Ihrem Ausdruck gegeben:

i = ((++a) + (++a) + (a++)) == ((6) + (7) + (7)); // a is 8 at the end 
i = ((a++) + (++a) + (++a)) == ((5) + (7) + (8)); // a is 8 at the end 

Die parenteses ich oben verwendet werden, durch Java implizit verwendet. Wenn Sie die Begriffe auf diese Weise betrachten, können Sie leicht erkennen, dass sie beide die gleichen sind wie sie kommutativ sind.

+1

so sagt sein Code: i = 6 + 7 + 7; i = 5 + 7 + 8 – user181750

+1

@ KlasLindbäck kommutativ bedeutet, dass Sie beide Ausdrücke austauschen können und immer noch das gleiche Ergebnis erhalten. Also a ++ + ++ a == ++ a + a ++ (5 + 7 == 6 + 6; a == 7 am Ende). – Aurril

15
i = ++a + ++a + a++; 

ist

i = 6 + 7 + 7 

Arbeiten: a inkrementieren bis 6 (Stromwert 6) + a bis 7 (Stromwert 7) inkrementieren. Summe 13 Nun fügen sie den aktuellen Wert a (= 7) und dann Inkrementieren a bis 8. Summe 20 und den Wert eines nach dem die Zuordnung abgeschlossen ist 8.

i = a++ + ++a + ++a; 

wird

i = 5 + 7 + 8 

Arbeiten: Am Anfangswert von a ist 5. Verwenden Sie es in der Addition und dann erhöhen Sie es auf 6 (aktueller Wert 6). Erhöhen Sie a vom aktuellen Wert 6 auf 7, um den anderen Operanden von + zu erhalten. Die Summe ist 12 und der aktuelle Wert von a ist 7. Als Nächstes wird a von 7 auf 8 erhöht (aktueller Wert = 8) und zur vorherigen Summe addiert, um 20 zu erhalten.

+0

diese Aussagen funktionieren von rechts nach links oder von links nach rechts? – Abhijeet

1

wenn a 5 ist, dann gibt a++ 5 auf die Expression und Inkremente a danach, während ++a Inkrementen a bevor die Anzahl der Expression Passing (die a 6 zur Expression in diesem Fall gibt). So

Sie berechnen

i = 6 + 7 + 7 
i = 5 + 7 + 8 
124

++a Schritten und verwendet dann die Variable.
a++ verwendet und erhöht dann die Variable.

Wenn Sie

a = 1; 

haben, und Sie tun

System.out.println(a++); //You will see 1 

//Now a is 2 

System.out.println(++a); //You will see 3 

@codaddict erklärt Ihre speziellen Schnipsel.

4

Im obigen Beispiel

int a = 5,i; 

i=++a + ++a + a++;  //Ans: i = 6 + 7 + 7 = 20 then a = 8 

i=a++ + ++a + ++a;  //Ans: i = 8 + 10 + 11 = 29 then a = 11 

a=++a + ++a + a++;  //Ans: a = 12 + 13 + 13 = 38 

System.out.println(a); //Ans: a = 38 

System.out.println(i); //Ans: i = 29 
0
a=5; i=++a + ++a + a++; 

ist

i = 7 + 6 + 7 

Arbeits: pre/post Schritt hat "rechts nach links" Assoziativität und Pre hat Vorrang vor Post, so zunächst Alle Vorinkremente werden als (++a + ++a) => 7 + 6 gelöst. Dann wird a=7 bereitgestellt, um inkrement =>7 + 6 + 7 =20 und a =8 zu buchen.

a=5; i=a++ + ++a + ++a; 

ist

i=7 + 7 + 6 

Arbeits: pre/post Schritt hat "rechts nach links" Assoziativität und vor Vorrang vor Beitrag hat, so in erster Linie vor Schritt wird als (++a + ++a) => 7 + 6 .then a=7 werden lösen wird bereitgestellt, um inkrement =>7 + 7 + 6 =20 und a =8 zu buchen.

0

pre-Inkrement- und Post-Inkrement äquivalent sind, wenn nicht in einem Ausdruck

int j =0; 
int r=0   
for(int v = 0; v<10; ++v) { 
      ++r; 
      j++; 
      System.out.println(j+" "+r); 
    } 
1 1 
2 2 
3 3  
4 4 
5 5 
6 6 
7 7 
8 8 
9 9 
10 10 
1

ich aber glaube, wenn Sie 8.1 alle Ihre Aussagen und führen Sie es in Java kombinieren Sie eine andere Antwort bekommen, zumindest das ist, Was meine Erfahrung sagt.

Der Code wird wie folgt arbeiten:

int a=5,i; 

i=++a + ++a + a++;   /*a = 5; 
           i=++a + ++a + a++; => 
           i=6 + 7 + 7; (a=8); i=20;*/ 

i=a++ + ++a + ++a;   /*a = 5; 
           i=a++ + ++a + ++a; => 
           i=8 + 10 + 11; (a=11); i=29;*/ 

a=++a + ++a + a++;   /*a=5; 
           a=++a + ++a + a++; => 
           a=12 + 13 + 13; a=38;*/ 

System.out.println(a);  //output: 38 
System.out.println(i);   //output: 29 
2

++ a prefix Inkrementoperator:

  • das Ergebnis berechnet wird, und die erste gespeicherte
  • dann wird die Variable verwendet wird.

a ++ ist Postfix Inkrementoperator:

  • die Variable zuerst benutzt wird,
  • dann wird das Ergebnis berechnet und gespeichert.

Sobald Sie sich an die Regeln erinnern, EZ für Sie alles zu berechnen!

1

der Annahme, dass man

int a=5; int i; 

i=++a + ++a + a++; 

System.out.println(i); 

a=5; 

i=a++ + ++a + ++a; 

System.out.println(i); 

a=5; 

a=++a + ++a + a++; 

System.out.println(a); 

bedeutete dies ausgewertet:

i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8) 

so ist i 7 + 6 + 7 = 20 und so wird 20 gedruckt.

i = (5, a is now 6) + (7, a is now 8) + (8, a is now 9) 

also ich ist 5 + 7 + 8 = 20 und so 20 wieder gedruckt wird.

a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8) 

und nachdem alle der rechten Seite ausgewertet wird (einschließlich einer Einstellung bis 8), wird ein auf 6 + 7 + 7 = 20 und so ist 20 ein letztes Mal gedruckt.

10

In beiden Fällen berechnet sie ersten Wert, aber in der Post-Inkrement hält alten Wert und nach Berechnung kehrt sie

++ a

  1. a = a + 1;
  2. Rückgabe a;

a ++

  1. temp = a;
  2. a = a + 1;
  3. Rücklauftemp.
+3

Klarste Antwort –

0

Ich glaube, Sie alle diese Aussagen anders ausgeführt werden
zusammen führt Ausführen => 38, 29

int a=5,i; 
i=++a + ++a + a++; 
//this means i= 6+7+7=20 and when this result is stored in i, 
//then last *a* will be incremented <br> 
i=a++ + ++a + ++a; 
//this means i= 5+7+8=20 (this could be complicated, 
//but its working like this),<br> 
a=++a + ++a + a++; 
//as a is 6+7+7=20 (this is incremented like this) 
Verwandte Themen