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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 7℃洋 中级黑马   /  2012-10-31 22:23  /  2967 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int x=3,y;
y=x+++++x*2+x+++++x;
System.out.println(y);


请问算出来的值为什么是25,而不是18!

评分

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

查看全部评分

13 个回复

倒序浏览
本帖最后由 樊鹏飞 于 2012-10-31 22:45 编辑

++在前:先运算再赋值
++在后:先赋值再运算
结果如图所示
1.(x++)取值3,取值完后做运算变成了4.
2.(++x*2)中,此时x已变为4,又++在前 先运算 变成了5, 式子运算结果为10;
3.(x++)中,++在后 所以先取值为5,之后做运算,x变成了6;
4.(++x)中,++在前 所以先运算 因为上一步中x已经为6  所以这里x变成了7;
最后将运算结果相加 3 + 5*2 + 5 + 7 = 25

q1q1.jpg (7.52 KB, 下载次数: 33)

q1q1.jpg

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 坚持不懈 于 2012-10-31 22:37 编辑

y=x++ + ++x*2+x++ + ++x;
3+5*2+5+7


      先使3 下次使用是4   ++x就是4+1=5   5*2   x++ X是5  下次使是6   ++X 就是6+1         

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 林剑 于 2012-10-31 22:39 编辑

为什么我运行了报错?

评分

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

查看全部评分

回复 使用道具 举报
x+++++x*2+x+++++x相当于(x++)+(++x)*2+(x++)+(++x)
从左往右  x++ 先运算 所以是3,然后自增变成4;接着第二个++x,先自增再运算,所以是5*2,第三个x++先运算 所以是5,再自增变成6,最后++x先自增变成7,再运算
3   +    5*2   +   5   +   7=25
4,       5,            6,       7

评分

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

查看全部评分

回复 使用道具 举报
够简写的啊,连括号都不加= =!。。

评分

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

查看全部评分

回复 使用道具 举报
周斌 中级黑马 2012-11-1 00:08:24
7#
本帖最后由 周斌 于 2012-11-1 00:12 编辑

优先级 运算符 结合性
1 . [] () ; ,
2 ++ ―― += ! ~ +(一元) -(一元) 右ð左
3 * / % 左ð右
4 +(二元) -(二元) 左ð右
5 << >> >>> 左ð右
6 < > <= >= instanceof 左ð右
7 = = != 左ð右
8 & 左ð右
9 ^ 左ð右
10 | 左ð右
11 && 左ð右
12 || 左ð右
13 ?: 右ð左
14 = *= /= %= += -= <<= >>= >>>= &= ^= |= 右ð左
根据上面的优先级可以把式子变成这个样子
y=((x++  +  (++x*2) ) +  x++ ) +   ++x;
          3       +     10       +       5       +     7 = 25

评分

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

查看全部评分

回复 使用道具 举报
虽然知道为什么,但是强烈谴责这样写代码的人。简直是没事找事,无聊之极。

评分

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

查看全部评分

回复 使用道具 举报
林剑 中级黑马 2012-11-1 08:01:12
9#
不加括号编译报错啊,你们有试过吗

评分

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

查看全部评分

回复 使用道具 举报
不是这样写   是我们老师布置的题目!
回复 使用道具 举报
x++为3 ++x为4 代入即可。
回复 使用道具 举报
这是个简单的赋值运算题目
考察你对++赋值的理解
按我的理解就是   ++  在前是先进行自增再赋值  ++在后是先进行++之前的运算!
代码如下:
class Temp
{
        public static void main(String[] args)
        {       
        int x=3,y;
        y=(x++)+(++x)*2+(x++)+(++x);
                //y=(x为3)3(自增赋值x=4)+(再自增1 x=5)5*2+(继续取x=5)5(x自增1赋值x=6)+(x再自增1赋值x=7)7=25;
        System.out.println("y="+y);
        }
}
回复 使用道具 举报
哥们我飘过
回复 使用道具 举报
{:soso_e183:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马