Regards
Salil Verma
SCJP 6  SCWCD 5  Javaranch SCJP FAQ  SCWCD Links
these two numbers should agree. the correct answer is 88, not 90.
Do you see what I mean?
x = x++ + x++ = 91 // Example 1
x = x++ + y++  ++y = 89 // Example 2
int x = 45;
int y = 12;
> x is now 45 and y is now 12
x = x++ + x++;
> add precedence
x = (x++) + (x++);
> substitute first part...
x = (45) + (x++);
> x is now 46; substitute second part...
x = (45) + (46);
> x becomes 47 after increment, and then becomes 91 after sum and assigment. Next...
*** This is where the first x is printed. When it has a value of 91 ***
x = x++ + y++  ++y;
> add precedence
x = (x++) + (y++)  (++y);
> substitute first part
x = (91) + (y++)  (++y);
> x is now 92. substitute second part.
x = (91) + (12)  (++y);
> x is now 92. y is now 13. substitute third part.
x = (91) + (12)  (14);
> x is now 92. y is now 14 (and since preincrement, 14 is used).
x = 89;
> x is now 89 and y is now 14. next...
*** This is where the second x is printed. When it has a value of 89 ***
a = (b=x++) + (c=x++) = 91
a = 91
b = 45
c = 46
x = 47
int x = 45;
int y = 12;
> x is now 45 and y is now 12
x = x++ + x++;
> add precedence
x = (x++) + (x++);
> substitute first part...
x = (45) + (x++);
*** The value of b is the first paren, which is 45 ***
> x is now 46; substitute second part...
x = (45) + (46);
*** The value of c is the second paren, which is 46 ***
> x becomes 47 after increment, and then becomes 91 after sum and assigment. Next...
*** The value of a should be the value of x at this point, has a value of 91 ***
*** The value of x should also be 91, but it wasn't assigned in the altered example, so has a value of 47 ***
d = (h=((e=a++) + (f=y++)))  (g=++y) = 89
h = 103
e = 91
f = 12
a = 92
y = 14
g = 14
x = x++ + y++  ++y;
> add precedence
x = (x++) + (y++)  (++y);
> substitute first part
x = (91) + (y++)  (++y);
*** The value of e is the first paren, which is 91 ***
> x is now 92. substitute second part.
*** the value of a is now 92, as you are using a instead of x ***
x = (91) + (12)  (++y);
*** The value of f is the second paren, which is 12 ***
*** The value of h is the first two parens, with is 91 + 12 = 103 ***
> x is now 92. y is now 13. substitute third part.
x = (91) + (12)  (14);
*** the value of g is the third paren, which is 14 ***
> x is now 92. y is now 14 (and since preincrement, 14 is used).
x = 89;
> x is now 89 and y is now 14. next...
*** and the value of y ends at 14 ***
Harry Henriques wrote:
Just take for granted that I coded the examples correctly, and look at the output in RED. I'm pretty sure I didn't make any stupid mistakes.
If you will take a look at "the dozen variables", maybe you'll notice that there is something strange happening in the two examples that I listed.
Harry Henriques wrote:In the first example, "x" is post incremented before it is added to the final x++ in the expression (x++ + x++). In the second example, (x++ + y++), "x" is added to "y" before "x" is post incremented and before "y" is post incremented.
K. Tsang CEng MBCS PMP PMIACP OCMJEA OCPJP
You showed up just in time for the waffles! And this tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn KlassenKoop
https://coderanch.com/wiki/718759/books/BuildingWorldBackyardPaulWheaton
