当前位置: 代码迷 >> J2SE >> 小弟我觉得小弟我弱爆了,看不懂这句代码,哪位高手能帮小弟我看下,多谢
  详细解决方案

小弟我觉得小弟我弱爆了,看不懂这句代码,哪位高手能帮小弟我看下,多谢

热度:143   发布时间:2016-04-24 01:25:19.0
我觉得我弱爆了,看不懂这句代码,谁能帮我看下,谢谢
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; // 正确
  相关解决方案