奇怪的Java语法

6
当我在解一份计算机科学UIL模拟试卷时,遇到了这个问题:
以下代码的输出结果是什么?
int a = 5;
int b = 7;
int c = 10;
c = b+++-c--+--a;
System.out.println(a + " " + b + " " + c);

我曾经写下了答案“由于语法错误没有输出”,但是它是错误的。真正的答案是 4 8 1!(我亲自测试过)请问有人能解释一下第四行是如何工作的吗?谢谢。

我不太明白你的问题... - user2638922
我不明白第四行发生了什么。你怎么可能有(b+++-c)而不是语法错误? - Will Sherwood
1
@JohnDoe:其实很容易。 - Makoto
@JohnDoe 请看一下我的回答,它解释了这个问题。 - user2638922
1
很抱歉你在考试中遇到了这样一个糟糕的问题。如果我在实际工作中遇到这样的方程式,我会立即重写它。 - William Morrison
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

c-- : 在使用c后,c的值将会减1

--a : 在使用a之前,a的值将会减1


6

就像这样:

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

这样应该更容易理解了!

看看运算符优先级,就能明白为什么要这样做。


3

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

他们故意压缩并混淆了代码以帮助你学习。实际上,这段代码的含义是这样的,c = (b + 1) + (-(c - 1)) + (a - 1);


2

让我们放慢速度,仔细看待这个方程式。认真思考一下。

int a = 5;
int b = 7; 
int c = 10;
c = b+++-c--+--a;
b++ 表示赋值后增加 b 的值,因此 b 在等式中保持原始值,但在等式之后将被增加。
然后是一个 +
然后是一个否定的 c--c 被减少,但对于等式而言仍保持不变。
然后将其加到 --a 上,这意味着 a 立即被减少。
因此,在打印语句处,变量的值将为:
c = 7 + -10 + 4 = 1
a = 4
b = 8

我认为这是一道不太适合用于测试的问题。它只是在问你是否理解 i++++i 的区别。


2

分解这个语句。它是有意混淆的。

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

这意味着:

  • 变量c被赋予以下计算结果:
    • b(递增将在此行之后生效),再加上
    • 一元运算符-作用于c(递减将在此行之后生效),再加上
    • a(递减将立即生效)。

将变量替换为相应的值,你会得到:

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

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

4 8 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接