Originally posted by Chinmay Kant: Can anybody explain why the o/p of the following code is 1,4. I am not getting the logic:-

public class Main { public static void main(String args[]){ int x =0; for(int i=0; i < 2; i++){ x +=(x += ++x); System.out.println(x); } } }

Thanks in Advance

I hope this helps:

1ST LOOP: x=0 x +=(x += ++x); - Inside parentheses: x = x + (1+x) ===> x = 0 + 1 = 1 - Outside: x = x + parentheses ===> x = 0 + 1 = 1 - x = 1

2ND LOOP: x=1 x +=(x += ++x); - Inside parentheses: x = x + (1+x) ===> x = 1 + 2 = 3 - Outside: x = x + parentheses ===> x = 1 + 3 = 4 - x = 4

Regards, Alex

Chinmay Kant
Greenhorn

Joined: Feb 04, 2008
Posts: 20

posted

0

I hope this helps:

1ST LOOP: x=0 x +=(x += ++x); - Inside parentheses: x = x + (1+x) ===> x = 0 + 1 = 1 - Outside: x = x + parentheses ===> x = 0 + 1 = 1 - x = 1

Thanks Alex, But one doubt when ++x occurs it chagnges the value of x from 0 to 1 so, when this operation is done does that value does not affect further calculation

for eg:- Inside parentheses ++x changes the value to 1 so, x = x +(++x) ---> x = 1 + 1 ---> x= 2 so, wo should be used further.

As ++x is part of the expression, the value of x will not be modified. When the controller comes to ++x, it evaluates to increment the "VALUE" of x and replaces that value as follows,

x += (x += 1) //if x=0

Hope you got it.

Arun Kumar Gaddam
Ranch Hand

Joined: May 05, 2007
Posts: 58

posted

0

Thanks SrinivasaRao Madugula.........if is that the case....thanks for your answer......

yeah if we consider that x still retains its previous value even after ++x the answer follows.....but the problem is why is the old value of x still retained in the expression.....anybody please elaborate...