• Post Reply Bookmark Topic Watch Topic
  • New Topic
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 Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

i+++ ++i

 
Ranch Hand
Posts: 46
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • 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.
 
Ranch Hand
Posts: 219
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • 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
 
Ranch Hand
Posts: 93
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • 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!
reply
    Bookmark Topic Watch Topic
  • New Topic