日期:2014-05-20  浏览次数:20704 次

我觉得我弱爆了,看不懂这句代码,谁能帮我看下,谢谢
Java code

  int ohMyGod = 1+ +2+3;
  System.out.println(ohMyGod);




竟然可以得出正确的结果:6
1+ +2+3是什么写法啊?

------解决方案--------------------
1+ +2 意思是1加上 正2

lz可以试试1+ -1 打印一下是零
------解决方案--------------------
Java code

int ohMyGod = 1+ - + - + +2;
         System.out.println(ohMyGod);

------解决方案--------------------
我在说详细点,比如,操作数op1,op2,先压栈op1,在压栈+,然后找到空格,空格不是数字,所以找到+,+也不是数字,把原来的运算符压出,把当前运算符压入,如此,找到2,可以执行一次运算,结果是3。真正的运行比这个复杂的多,还要判断括弧,优先级等。
你看你用window自带的计算器也是这么整的,按下1,在按+,-,*,/乱按都没关系,最后按个数字还是能出结果。
------解决方案--------------------
1+ +2+3 = 1 + 2 + 3
------解决方案--------------------
int ohMyGod = 1+(+2)+3;这样写你该知道了吧
------解决方案--------------------
探讨

我在说详细点,比如,操作数op1,op2,先压栈op1,在压栈+,然后找到空格,空格不是数字,所以找到+,+也不是数字,把原来的运算符压出,把当前运算符压入,如此,找到2,可以执行一次运算,结果是3。真正的运行比这个复杂的多,还要判断括弧,优先级等。
你看你用window自带的计算器也是这么整的,按下1,在按+,-,*,/乱按都没关系,最后按个数字还是能出结果。

------解决方案--------------------
乱写Java是不能识别的,Java编译器不是计算器,不会做忽略上一个运算符这种事情:

比如:
int i=0;
i=i+++++i; // 出错
i=i++ + ++i; // 正确