This week's book giveaway is in the OO, Patterns, UML and Refactoring forum.We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line!See this thread for details.
Big Moose Saloon
 Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies Register / Login Win a copy of Refactoring for Software Design Smells: Managing Technical Debt this week in the OO, Patterns, UML and Refactoring forum!

# Operators

Chinmay Kant
Greenhorn

Joined: Feb 04, 2008
Posts: 20
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
Alex Belisle Turcot
Ranch Hand

Joined: Apr 26, 2005
Posts: 516
Hi,

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
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.
Arun Kumar Gaddam
Ranch Hand

Joined: May 05, 2007
Posts: 58
Ya Alex that's my doubt tooo........

when x++ happens does it change change value to 1....
SrinivasaRao Madugula
Greenhorn

Joined: Feb 06, 2008
Posts: 7
x +=(x += ++x);

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
Thanks SrinivasaRao Madugula.........if is that the case....thanks for your answer......
surabhi jain
Greenhorn

Joined: Jan 31, 2008
Posts: 6
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...

I agree. Here's the link: http://aspose.com/file-tools

subject: Operators