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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© L10052108 中级黑马   /  2016-11-9 16:45  /  1413 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 L10052108 于 2016-11-22 21:57 编辑

这是我做的基础自我测评的一道题;我之前也经常使用自增和自减
(i++) 先运算后,后自增或自减
(++i)先自增或者自减,再运算
可是有多个自增的,就有点儿不懂了
[AppleScript] 纯文本查看 复制代码
public class test {
        public static void main(String[] args) {
                int a = 10;
                int b = (a++) + (++a) + (a * 10);
                System.out.println(b);
        }

}
输出的结果是:142
int b = (a++) + (++a) + (a * 10);
只有一种解释这条语句中后面三个a 的肯定不相同。原因呢?有什么规律,求解

2016年11月22日再次编辑
这道题我考虑了很久,现在说说我的想法:错误的地方请指出


如果只是简单的自增自减,是一个很简单的问题;
这道题目,考的显然不是考这个问题;而是多个自增自减之间的运算;这样就要考虑一个问题,
int b = (a++) + (++a) + (a * 10);
这个计算式,计算机是一次运算的吗?看起来是一条语句,应该是一次执行完成这条语句,可是事实上,计算机无法完成,会把这一条语句拆分成几条语句,进行运算
这样我们需要的是了解,这一条语句是如何进行,拆成几条语句的(如图所示)
[AppleScript] 纯文本查看 复制代码
第一句:a = 10; 运算结果是 a =10
第二句:(a++)  计算结果     a =11
第三句: 10 + (++a)  计算结果    (a++) +(++a)  = 22;
第四句:b = 22 + (a*10)  计算结果  b = 142  a =12

如果把这个程序进行分解,完全按照计算机的运算的步骤的话,非常好理解了。

13 个回复

倒序浏览
(a++)是10,然后(++a)是12,最后a是12,所以10+12+120=142
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
本帖最后由 L10052108 于 2016-11-9 21:15 编辑
peng84 发表于 2016-11-9 20:39
(a++)是10,然后(++a)是12,最后a是12,所以10+12+120=142

每一个a 值不一样,有什么规律吗?第一个a值是10 第二个是12 第三个是12
先运算(a++)  还是(++a)的值,还是a*10的值
回复 使用道具 举报
a++是先运算再自增  ++a 是先自增再运算
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报

a++是先运算再自增  ++a 是先自增再运算,这就是规律
回复 使用道具 举报
anTG 发表于 2016-11-9 22:32
a++是先运算再自增  ++a 是先自增再运算,这就是规律

int b = (a++) + (++a) + (a * 10);
等号右边的执行顺序是什么,先计算(a++)还是(++a)
回复 使用道具 举报
一步一步往往后啊。这里又不涉及什么循环啥的,优先级也都一样吧
回复 使用道具 举报
1、(a++)a值是10先提出来不管,a后边++是自增加1是11了。
2、11赋值给后边(++a)的a值了,就是++11了,然后自增加1不就是12了吗?
3、此刻a的值是12了*10就是120了。
4、前面的10+12+120你懂的
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报
feiruo521 发表于 2016-11-9 23:36
1、(a++)a值是10先提出来不管,a后边++是自增加1是11了。
2、11赋值给后边(++a)的a值了,就是++11了, ...

[AppleScript] 纯文本查看 复制代码
  public static void main(String[] args) {
        int a = 10;
        int b = (a++) + (a++) + (a * 10);
        System.out.println(b);
    }


运行结果
两个(a++),结果值应该是不一样的。哪一个是10 那个一个是11
回复 使用道具 举报
L10052108 发表于 2016-11-9 23:54
[mw_shl_code=applescript,true]  public static void main(String[] args) {
        int a = 10;
      ...

10 、11 、12*10=120+10+11=141
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
加油,诸君,一同努力、。
回复 使用道具 举报
ylz1997 发表于 2016-11-9 21:27
a++是先运算再自增  ++a 是先自增再运算

好评,这还是在学习c语言时学的呢
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
anTG 中级黑马 2016-11-10 01:12:47
14#
L10052108 发表于 2016-11-9 23:30
int b = (a++) + (++a) + (a * 10);
等号右边的执行顺序是什么,先计算(a++)还是(++a)
...

java这里就是从左到右,在C语言中好像是有执行顺序的,具体是什么记不太清了,你可以区查查,完了告诉我....哈哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马