当我遇到这个问题时,我正在练习计算机科学UIL测试表:
以下是什么输出?
int a = 5;
int b = 7;
int c = 10;
c = b+++-c--+--a;
System.out.println(a + " " + b + " " + c);
我记下了答案“由于语法错误而没有输出”,但我弄错了。真正的答案是4 8 1! (我自己测试过)
有人可以向我解释第4行是如何运作的吗? 感谢
答案 0 :(得分:14)
我添加了一些括号:
int a = 5;
int b = 7;
int c = 10;
c = (b++) + (-(c--)) + (--a);
System.out.println(a + " " + b + " " + c);
b ++: 使用b后b = b + 1
c--: 使用c后c = c - 1
- a: 在使用a之前a = a - 1
答案 1 :(得分:6)
答案 2 :(得分:3)
查看c
的初始化,c = (b++) + (-(c--)) + (--a);
他们压缩并故意混淆你的学习目的。代码基本上是这样说的,c = (b + 1) + (-(c - 1)) + (a - 1);
答案 3 :(得分:2)
稍微分解一下这句话。这是故意混淆的。
c = b++ + -c-- + --a;
这意味着什么:
c
被赋予结果......
b
(增量将在此行之后生效),加上-
的一元操作c
(减少将在此行之后生效),再加上a
(减量立即生效)。用值替换变量,得到:
c = 7 + (-10) + 4
c = 1
...并且你的打印声明的结果应该是:
4 8 0
答案 4 :(得分:2)
让我们慢下来,仔细看看这个等式。仔细想想。
int a = 5;
int b = 7;
int c = 10;
c = b+++-c--+--a;
b ++表示赋值后增加b,因此b在等式中保持等于其原始值,但随后会增加等式。
然后有一个+。
然后否定c--
。 c
递减,但对于等式保持不变。
然后将其添加到--a,这意味着会立即减少。
因此print语句中的变量值为:
c = 7 + -10 + 4 = 1
a = 4
b = 8
我可以补充说,在我看来,这对于测试来说是一个糟糕的问题。所有它真正的问题是,如果你理解i++
vs ++i
。