This week's book giveaway is in the Design forum.
We're giving away four copies of Design for the Mind and have Victor S. Yocco on-line!
See this thread for details.
Win a copy of Design for the Mind this week in the Design forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

i+++ ++i

 
weiliu lili
Ranch Hand
Posts: 46
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
public class Question21 {
public static void main(String[] args) {
int i=3;
System.out.println(getBoolean()? i=2*i++:i+++ ++i);//line 4
}
//Heads or tail?
public static boolean getBoolean(){
if((int)(Math.random()*2)==0)
return false;
else
return true;
}
}
Prints randomly 6 or 8 at each execution.The explanation as follows:
No problem here, the code compiles fine. One thing to be aware of is that i+++ ++i compiles fine because of the way Java code is actually parsed. The parser tokenizes the source in bunches of longest valid character sequences. i+++ ++i will be tokenized as i,++,+,++,i and interpreted as i++ + ++i, that is i post-incremented plus i pre-incremented.
my question is that if I use"i+++++i" or "i++ +++i" in line 4, there is compilation error, but if I use"i++ + ++i" or the above one ,there is no error, why?
The problem is that I still dont understand the above explanation.
 
Thiru Thangavelu
Ranch Hand
Posts: 219
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
let's see the order of compiler parsing.
1) i+++++i
(i)(++) (++) (+) (i)
this means i (++) (++) i. But here we are missing the operator(+ or - etc.) in between i++ and ++i.
2) i++ +++i
(i) (++) (++) (+) i
The same case like the above
3) i+++ ++i
(i) (++) (+) (++) i
Here we have the operator + in between i++ and ++i. So this compiles fine.
So, basically the compiler looks for longer tokens, means if there is +++ means compiler interprets (++) (+) not (+) (++) and if finds a space in between it will cut off the operator there itself like inperpreting this +++ +++ as (++) (+) (++) (+).
Hope this helps
 
Gautam Sewani
Ranch Hand
Posts: 93
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

If I use i+++++i or i++ ++i then it gives a compiler error,but when I use i++ + ++i,then it compile fine

This is quite simple.
1.i+++++i
This will surely result in a compile time error because +++++ is not an operator!
(Dont forget the basics,the there must be a binary operators between the two variable and +++++ is just not a operator)
2. i++ +++i
This will result in a compile time error because +++ is also not a operator.Java has two increment/decrement operators,++ and -- and there is not operator as +++.
3.i++ + ++i
'+' is a binary operator that works on two numbers.i++ and ++i will both produce valid integer values,which will be added by + operator,so there is no chance of a compiler error!
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic