A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘先斌 中级黑马   /  2014-3-19 13:38  /  1772 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

那位大侠给说下,我知道a++是先赋值在运算,++a是先运算后赋值。
有一道题是   int a = 3,b;
            b = (a++)+(++a)*2+(a++)+(++a);
我算出来的结果b = 18,但答案却是b = 25。
是不是第一个(a++)和第三个(a++)的值不一样,第二个和第四个(++a)的值不一样。
但是哪里不一样我就不知道了,是两个a的值不一样还是前面的(a++)和后面的(a++)整体的出来的值不一样。

请大侠帮我解答下,a++和++a快把我累死了

评分

参与人数 1黑马币 +1 收起 理由
zzkang0206 + 1

查看全部评分

15 个回复

倒序浏览
a++是先用后递增;++a是先递增后调用
回复 使用道具 举报
b=3+5*2+5+7=25
b = (a++)+(++a)*2+(a++)+(++a);
a++是先用a在进行自增
++a则是先自增在用a的值

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
方青木 发表于 2014-3-19 13:47
b=3+5*2+5+7=25
b = (a++)+(++a)*2+(a++)+(++a);
a++是先用a在进行自增

好的~谢谢!
回复 使用道具 举报
郭黎明 发表于 2014-3-19 13:44
a++是先用后递增;++a是先递增后调用

好的~谢谢!
回复 使用道具 举报
自己编写程序验证一下,结合演示结构记忆
回复 使用道具 举报
戒爱 中级黑马 2014-3-19 14:01:07
7#
                int a = 5;
                int b = a+++ ++a + a++;
                System.out.println(a+"--"+b);

这个都可以,刚刚玩了下
回复 使用道具 举报
首先,(a++)后,a先把值赋给某个数后再自增一次,此时的结果是3,接着a已经变成了a=4,接着(++a),是先自增一次,此时是5,此时a=5,*2=10,后面依次是(a++),先赋值后自增,此时是5,接着自增一次为a=6,最后(++a),先自增再赋值,此时a=7.
最后把这些加起来是3+5*2+5+7=25

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
sgs_gzy 发表于 2014-3-19 14:10
首先,(a++)后,a先把值赋给某个数后再自增一次,此时的结果是3,接着a已经变成了a=4,接着(++a),是先自增一 ...

好的~谢谢!:)
回复 使用道具 举报
b = (a++)+(++a)*2+(a++)+(++a);
1.     第一个a++ 先用后递增 此时还是3
2.     ++a 递增后调用 上一步a=4了再递增 此时a成了5   再乘2 =10
3.     第二个a++ 先用后递增 此时是5
4.     ++a 递增后调用 上一步 a=6 再递增 此时a成了7
最后结果 b = 3+5*2+5+7 = 25

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
a++是先用后递增;++a是先递增后调用

a++
a++ = a;
a = a++;

++a
a = a+1;
++a = a;

--a和a--是一样的道理,你要分清楚你是要a++这个表达式的值,还是需要的a的值

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
a++先运算后自增,++a先自增后运算
b = 3+5*2+5+7 = 25

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
好像是来晚了,关于a++和++a,最终的结果肯定是a=a+1;但是在参入到其他的运算的时候,
就要考虑是先加1再被调用到运算,还是先被调用,再运算赋值给本身了。
此题:int a=3,b;
     b = (a++)+(++a)*2+(a++)+(++a);
正确思路是:
第一个a参加运算,再+1,第二个是+1再运算,但是别忘记,第二个a是第一个a+1的结果,
以此类推,第三个a是第二个a再次+1的结果,第四个a是第三个再次+1的结果
最终现象:     b=3+5*2+5+7=25
您的错误思路可能是
                    b=3+4*2+3+4=18
您的a始终调用了最初的初始定义了。
回复 使用道具 举报
b = (a++)+(++a)*2+(a++)+(++a);
1.第一个(a++)因为没有用a执行操作,所以a=3--->当执行到(++a)*2时,因为爱需要先执行++,所以此时a将执行两次自增操作,a=5.之后又是a++,a不作操作,a=5;-->(++a)a自增两次,所以a=7;
所以b=3+5*2+5+7=25
回复 使用道具 举报
这我刚学的时候也容易绕进去,然后搞几个小代码玩玩就差不多清楚了
(a++)+(++a)*2+(a++)+(++a)=3+5*2+5+7=25
第一个(a++)先用他自己,然后再增为4
第一个(++a)在a=4的基础上再+1.当a=5时乘以2
后面一样

我每次都是看a在前还是后,a在前就直接用a的值,在后就先加再用。不然时间一长就又晕了
回复 使用道具 举报
❤゛Mr._Sun╮ 发表于 2014-3-19 14:18
b = (a++)+(++a)*2+(a++)+(++a);
1.     第一个a++ 先用后递增 此时还是3
2.     ++a 递增后调用 上一步a= ...

第二步。应该是先++a,在返回执行a++;也就是先++a,a=4;a被调用后又执行了前面的a++操作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马