 Win a copy of JDBC Workbook this week in the JDBC and Relational Databases forum
or A Day in Code in the A Day in Code forum!
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
• Campbell Ritchie
• Paul Clapham
• Jeanne Boyarsky
• Junilu Lacar
• Henry Wong
Sheriffs:
• Ron McLeod
• Devaka Cooray
• Tim Cooke
Saloon Keepers:
• Tim Moores
• Stephan van Hulst
• Frits Walraven
• Tim Holloway
• Carey Brown
Bartenders:
• Piet Souris
• salvin francis
• fred rosenberger

# operators

Ranch Hand
Posts: 290
• • • • public class Q9{

public static void main(String[] args){

int i=3;

System.out.println(i*=2+i++);

}

}
please explain the way output is coming .
output is 15.

nitin sharma
Ranch Hand
Posts: 290
• • • • somebody please come up with something

Greenhorn
Posts: 24
• • • • Hi Nitin,
int i= 3;
i*=2+i++;
we can put it as i=i*(2+i++)
then first evaluate and then asign
i=3*5
i=15
if we did
i*=2+(++i);
then i would be 18

[This message has been edited by Mafalda Alabort (edited March 24, 2001).]

Greenhorn
Posts: 25
• • • • here the expression solved from right to left order
step 1
it solves the i++ which gives result as 3 i.e) the value is taken before it gets incremented
step2
the 3 is added with 2 gives 5
step 3
the value 5 is multiplied with 3 (value of i) due to *= , which gives answer as 15

Originally posted by nitin sharma:
public class Q9{

public static void main(String[] args){

int i=3;

System.out.println(i*=2+i++);

}

}
please explain the way output is coming .
output is 15.

nitin sharma
Ranch Hand
Posts: 290
• • • • thank's expert's

Ranch Hand
Posts: 153
• • • • I have answered for the same question here. Ranch Hand
Posts: 108
• • • • Originally posted by Mafalda Alabort:
Hi Nitin,
int i= 3;
i*=2+i++;
we can put it as i=i*(2+i++)
then first evaluate and then asign
i=3*5
i=15
if we did
i*=2+(++i);
then i would be 18

[This message has been edited by Mafalda Alabort (edited March 24, 2001).]

Hi Mafalda ,
I think wht. u have written last is wrong.
"if we did
i*=2+(++i);
then i would be 18"
I think it should be 24.

Correct me if I am wrong.
<marquee>Ratul Banerjee</marquee>

Ranch Hand
Posts: 782
• • • • I think the expression:
i*=2+(++i);
would indeed be 18 and not 24. ++i would give you 4. Then you would add that to 2. and then multiply by 3 giving you 18.

tvs sundaram
Ranch Hand
Posts: 153
• • • • I feel, What ameen ahamed written is not correct
The order is not from right to left but the other way.
The problem:
In the above code i want's to know when System.out.println(i*=2+i++); is executed first of all i++ will get executed then the value if i(3)will be added to 2 and the result is 5 ,now my question is when the next i=i*5 is executed the value of i should have been 4 because of post increment value which multiplied by 5 should give 20 not 15.
Please throw some mashal(light) on it.
As per RHE book, page 33, the evaluation order in an expression is fixed
i.e from left to right.
Now let us try to solve your problem.
If x*=a; then this should be interpreted as x=(T)(x*(a));
By following this rule in your question the steps are as follows.
System.out.println(i*=2+i++);
System.out.println(i=(T)(i*(2+i++));
Now u assign values from left to right once the values are known
System.out.println(i=(T)(3*(2+3++));
System.out.println(i=(T)(3*(2+3)); // Note i is post increment operator.
So the answer printed will be 15.
I repeat:
Also note the braces are very clear as per rules and precedence play no role in this problem.
Hope this helps. 