6

当我遇到这个问题时,我正在练习计算机科学 UIL 测试表:

下面的输出是什么?

int a = 5;
int b = 7;
int c = 10;
c = b+++-c--+--a;
System.out.println(a + " " + b + " " + c);

我记下了“由于语法错误而没有输出”的答案,但我弄错了。真正的答案是 4 8 1!(我自己测试过)

有人可以向我解释第 4 行是如何工作的吗?
谢谢

4

5 回答 5

14

我添加了一些括号:

int a = 5;
int b = 7;
int c = 10;
c = (b++) + (-(c--)) + (--a);
System.out.println(a + " " + b + " " + c);

b++ : b = b + 1 在使用 b 之后

c-- : c = c - 1 在使用 c 之后

--a : a = a - 1 在使用 a 之前

于 2013-08-04T05:17:55.977 回答
6

像这样看:

(b++) + (-(c--)) + (--a)

这应该更有意义!

查看运算符优先级以了解它为什么会这样工作。

于 2013-08-04T05:18:04.197 回答
3

看看c这样的初始化,c = (b++) + (-(c--)) + (--a);

为了您的学习目的,他们将其压缩并故意混淆。代码本质上是这样说的,c = (b + 1) + (-(c - 1)) + (a - 1);

于 2013-08-04T05:20:51.810 回答
2

稍微分解一下声明。这是故意混淆的。

c = b++ + -c-- + --a;

这意味着什么:

  • 变量c被分配了...的结果
    • b(递增将在此行之后生效),加上
    • (减量将在此行之后生效)的一元运算-,加上c
    • a(减量立即生效)。

用值替换变量,你得到:

c = 7 + (-10) + 4
c = 1

...您的打印语句的结果应该是:

4 8 0
于 2013-08-04T05:18:24.020 回答
2

让我们放慢速度,仔细看看方程。仔细考虑一下。

int a = 5;
int b = 7; 
int c = 10;
c = b+++-c--+--a;

b++ 表示赋值后递增 b,因此 b 在方程中保持等于其原始值,但在方程后将递增。

然后是+。

然后一个否定c--c递减,但方程将保持不变。

然后将其添加到 --a,这意味着 a 立即递减。

因此 print 语句中的变量值将是:

c = 7 + -10 + 4 = 1
a = 4
b = 8

我可以补充一点,在我看来,这是一个糟糕的测试问题。它真正要问的是你是否理解i++vs ++i

于 2013-08-04T05:24:17.467 回答