Win a copy of Re-engineering Legacy Software this week in the Refactoring forum
or Docker in Action in the Cloud/Virtualization forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Tricky output while using post increment and pre increment operators

 
Chaitanya Vivek
Ranch Hand
Posts: 36
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator


how come the above code is printing 11,11 instead of 11,12

can any fellow rancher unveil the logic behind it.

thanks
chaitanya
 
Shaan Shar
Ranch Hand
Posts: 1249
Java Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Chaitanya Vivek:


how come the above code is printing 11,11 instead of 11,12

can any fellow rancher unveil the logic behind it.

thanks
chaitanya


Check carefully at line #3 you are assigning 11 to i and incrementing i by 1 but when you have assigned the value of i it's again 11 even after increment.
I mean to say that post-increment doesn't matter's here because you are assigning the value to i itself.

I hope it make clears you.



 
nitin pokhriyal
Ranch Hand
Posts: 263
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hi,

In the statement i = i++, the increment of i does take place when i++ is evaluated.

However, the value of a postincrement is the value of the value before the increment takes place.

the postincrement i++ has the value of i before the increment takes place, even though i++ is going to increment i. In this case if i is 11, i++ will increment i's value to 12.

However, because i is on the left-hand side of the assignment statement, i is going to be given the value of the right-hand side.

The value of the right-hand side is the value of i++.

So i = i++, no matter what i is, will not change i. Just to conclude assignment done before incrementing the value. so value of i will not change. More over you can try just by replace i=i++ with i++ and see the answer you are looking for.

anybody correct me if i m wrong

Regards,
nitin
 
Gowher Naik
Ranch Hand
Posts: 643
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
There are two types of increments
1 post increment
2.pre increment

Post increment increments after opertion.
Example-:

int j=1;
int i=j++;
value of i=1

Pre increment increments before opertion.
Example-:

int j=1;
int i=++j;
value of i=2
 
Shaan Shar
Ranch Hand
Posts: 1249
Java Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Quote by Nitin:
anybody correct me if i m wrong



Yes Nitin you are correct.
 
Douglas Chorpita
Ranch Hand
Posts: 97
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Chaitanya,

Yes, Nitin is correct. Boy, some fast responses.

Here is mine which came a little too late.

One step at a time.

Line 1: i is set to 10. Easy.

Line 2: i is incremented first (prefix notation, i becomes 11), then the value of the expression is assigned to i (i still 11). This is a "double assignment", if you think about it, but both assignments yield the same result.

Line 3: the value of the expression is computed first (postfix notation, the expression "i++" is 11), then i is incremented (becomes 12). Then the expression value (which is 11) is assigned to i (i then gets set back to 11). Again, this is a "double assignment".

I can understand how someone might be confused and think that the answer might be 12, 12. But how could it be 11, 12? The println() statements in your example have no code in between them. How could the value possibly change? Maybe your code sample has the statements in the wrong order. Anyway, the "trick" is what I explained above.

This is a very tricky and very good question. I am sure this kind of thing confuses many programmers.

Thank you very much for contributing this question.

Good job, Nitin!!
[ July 13, 2006: Message edited by: Douglas Chorpita ]
 
Chaitanya Vivek
Ranch Hand
Posts: 36
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
i = i++ means first i=i and then i will be incremented. but where it will be incremented? and how can we see it?
 
Douglas Chorpita
Ranch Hand
Posts: 97
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You can change the code. Instead of:



You can break it down into its parts:



temp will prove that i was incremented to 12.
[ July 13, 2006: Message edited by: Douglas Chorpita ]
 
Chaitanya Vivek
Ranch Hand
Posts: 36
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Douglas

Thank you very much for your time and effort to explain me.
Now i got the point...

many thanks and regards
chaitanya
 
Joe Harry
Ranch Hand
Posts: 10085
3
Eclipse IDE Mac PPC Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Douglas Chorpita ,

This was a good explanation and i got it straight.

Thanks a lot.

Regards,
Jothi Shankar Kumar. S
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic