黑马程序员技术交流社区

标题: int a=2;a+=a-=++a*a--;我挂了。 [打印本页]

作者: ヅ飞飞    时间: 2013-10-22 21:35
标题: int a=2;a+=a-=++a*a--;我挂了。
本帖最后由 ヅ飞飞 于 2013-10-23 10:43 编辑

今天同学去招聘会搞了一份java开放工程师笔试题,题目如下:
int a=2;a+=a-=++a*a--;a=?
结果是-5;
琢磨了半天不知道java咋算的这。求指点,最好详细一些。

另,笔试最后一题是个测三观的题,你们感受下:
欧洲有个妇人患了癌症,生命垂危,医生认为只有一种药能救她,就是本城的一个药剂师最近发明的镭。制造这种药要花很多钱,药剂师索价要高过成本十倍,他花了200元制造镭,而这点药他索价2000元。病妇的丈夫到处向熟人借钱,一共才借了1000元,只够药费的一半,丈夫不得已,只好告诉药剂师,他的妻子快要死了,请求药剂师便宜一点卖给他,或者允许他赊欠,但药剂师说:“不成,我发明此药就是为了赚钱。”丈夫走投无路竟撬开商店的门,为妻子偷来了药。
问题:
这个丈夫应该这样做么?(如果应该)为什么?(如果不应该)为什么不应该?法官该不该判他的刑?为什么?
如果是你会怎么做?

作者: 寻丶丶觅    时间: 2013-10-22 21:55
按照一步步向下做 首先a+=a这里完成了一个对a赋值的操作a=a+a并返回一个值4,接下来4-=++a,这里返回值为-1,并a=5,最后-1*a--,结果为-5 如果打印a值,最后应该为4。
作者: 寻丶丶觅    时间: 2013-10-22 22:06
验算了一下 虽然结果一样 过程是错误的,应该还是有算数优先级,先计算了++a*a-- ,计算结果为9,并先对a自增,计算后,a自减a=2,这时候表达式为a+=a-=9;然后按我上面那个步骤计算,a+=a, a=a+a,并返回a=4,表达式变为a-=9.最后结果为-5,并对a赋值.
a
作者: 深情小建    时间: 2013-10-22 22:07
这是一个测运算符运算顺序的题:
int a=2;a+=a-=++a*a--;

解答:
先++a        -->3    此时a=3
再a*a--       -->9   运算完后a--    此时a=2
再a-=         -->即a=a-9  得-7      此时a还是2
再a+=        -->即a=a+9 得-5   即最后结果为-5         当然a还是2



最后的毁三观的题没看懂,,,还望不吝赐教~~~~~~~~~~~~~~~
作者: 寻丶丶觅    时间: 2013-10-22 22:20
深情小建 发表于 2013-10-22 22:07
这是一个测运算符运算顺序的题:
int a=2;a+=a-=++a*a--;

你把这段语句编写下,打印后a=-5的
作者: mayor125    时间: 2013-10-22 23:08

上面那个运算题考的是运算符的优先级问题和运算顺序问题。
以此来分析一下这个运算题目,下面是我的思路:

1、自增、自减的优先级高于赋值运算符,所以第一步先计算++a*a--
因为int a=2,所以++a=3,++a*a--相当于3*3=9,这步运算完了之后可得a=2.

2、上一步完成之后,该式子可以写成:a+=a-=9,因为a此时等于2,
根据赋值运算符“从右至左”的运算顺序,a+=a-=9可以写成:a+=(a=a-9)
--> a+=(-7) --> a=a-7 --> a=2-7=-5.
作者: 寻丶丶觅    时间: 2013-10-23 00:00
我又来了,抱歉耽误楼主了,a值的自增和自减只会影响到其右面a的赋值,对自增自减前的a值无作用,比如++a*a--,头一个++a,先对本身自增,并影响a--的a值,对前面的a值并无影响,这里就是3*3,其次a--,这个是可有可无的,因为其后并没有a值,所以该值自增或自减都无关紧要,剩下的按从右向左顺序运算,我得理解就是先算=号右面的。
作者: 雨过丶天已晴    时间: 2013-10-23 09:22
6楼说得很棒,但我认为这是运算符优先级以及运算符方向的问题
运算符优先级:+= 等于 -= 小于 *  小于 自增
运算符方向:+= 与 -= 从右往左, * 从左往右 , 自增 从右往左
我们从自增开始看,++a = 3, 此时a = 3
                            a-- = 3,  此时a = 2
                           表达式变为 a += a -=9, a=2
                           从右往前算,a += -7
                           继续 a = -5
不知对楼主是否有帮助,不对之处,大家多多指正{:soso_e152:}      
作者: 寻丶丶觅    时间: 2013-10-23 09:29
雨过丶天已晴 发表于 2013-10-23 09:22
6楼说得很棒,但我认为这是运算符优先级以及运算符方向的问题
运算符优先级:+= 等于 -= 小于 *  小于 自增 ...

表达式变为 a += a -=9, a=2  ,这时候的a值是对前面没有影响的最后的a不管有没有自减,答案都是-5.
这道题我感觉考的就是关于变量自增自减影响
int a = 2;
a+=a+(++a)+a;
答案为10.
我认为自增或自减只对该方法右面的a有影响。上面的表达式最后是
a+=2+3+3;左面的a还是2;
自己的理解 希望高手给个系统的解答。
作者: bird_not_fat    时间: 2013-10-23 10:03
http://baike.baidu.com/link?url=Q2Czuh2eZp5Nf7nUW8vGrtsDJtbniK49JA6COesmwp0WP-ZmrwpwfzISqQVzBz2AEVXG4zuONSoWcZdvrycrGq
第二个题...
作者: ヅ飞飞    时间: 2013-10-23 10:33
bird_not_fat 发表于 2013-10-23 10:03
http://baike.baidu.com/link?url=Q2Czuh2eZp5Nf7nUW8vGrtsDJtbniK49JA6COesmwp0WP-ZmrwpwfzISqQVzBz2AEVXG ...

这个都找的到,相当靠谱啊亲。
作者: ヅ飞飞    时间: 2013-10-23 10:42
寻丶丶觅 发表于 2013-10-23 09:29
表达式变为 a += a -=9, a=2  ,这时候的a值是对前面没有影响的最后的a不管有没有自减,答案都是-5.
这道 ...

自增自减运算符影响的是后面的变量值。这个知识点很重要,张姿势了,谢谢你的细心回答。
作者: ヅ飞飞    时间: 2013-10-23 10:47
深情小建 发表于 2013-10-22 22:07
这是一个测运算符运算顺序的题:
int a=2;a+=a-=++a*a--;

第二题感觉没有标准,10楼分享了你感受下:http://baike.baidu.com/link?url=Q2Czuh2eZp5Nf7nUW8vGrtsDJtbniK49JA6COesmwp0WP-ZmrwpwfzISqQVzBz2AEVXG4zuONSoWcZdvrycrGq
作者: 寻丶丶觅    时间: 2013-10-23 11:05
ヅ飞飞 发表于 2013-10-23 10:42
自增自减运算符影响的是后面的变量值。这个知识点很重要,张姿势了,谢谢你的细心回答。 ...

我也是在自学,看我前面回答就知道了,也是一点点摸索,共同进步
作者: 魏-玉-彪    时间: 2013-10-23 15:10



JAVA语言 运算符优先级


优先级        运算符        结合性
1        () [] .        从左到右
2        ! +(正)  -(负) ~ ++ --        从右向左
3        * / %        从左向右
4        +(加) -(减)        从左向右
5        << >> >>>        从左向右
6        < <= > >= instanceof        从左向右
7        ==   !=        左向右
8        &(按位与)        从左向右
9        ^        从左向右
10        |        从左向右
11        &&        从左向右
12        ||        从左向右
13        ?:        从右向左
14        = += -= *= /= %= &= |= ^=  ~=  <<= >>=   >>>=        从右向左
  1. a=2;a+=a-=++a*a--   // 在此例中
复制代码
优先级最高的为 :++,和 --,
第二为*
第三为 += -=

首先,a++ 等于3,a--由于 是后自减a--,所以,a的值要等*运算完后 才自减。
这时表达式 -=符号右边的值为9,同时 a的值自减1后为2.
第三步,执行a+= 运算,此时 -=左边值为4,右边值为9.
最后结果为-5






      关于三观的问题,主要考察一个人的 价值观,这个没有标准答案,不必纠结









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2