我有一个关于+=
运算符的问题。
我的任务是检查最后的j
值。现在,我已经通过Java运行它并获得了结果,但我并没有真正了解解决方案是如何组合在一起的。我希望有人可以向我解释它是如何确立的:
(1)
for (i = 10, j = 1; i > 0; i = i - 2)
j += j;
解决方案:j = 32
(2)
for (j = 0, i = 0; j < 10; j = j + i, i++)
j += j;
解决方案:j = 11
(3)
for (i = 0, j = 10; i < 10 && j > 5; i++)
j += j-- + i++;
解决方案:j = 372
答案 0 :(得分:2)
j += j;
与
相同j = j + j;
也就是说,它会在'+ ='之后的所有内容中添加j,所以
j += j + j-- + i++;
与
相同j = j + (j--) + (i++);
或
j = j + j + i; //the ++ adds one to i and the -- takes one from j after this statement has ran
答案 1 :(得分:1)
让我们展开j += j-- + i++
。
j--
返回j的值,然后递减j,即如果j为2,则返回2,之后j为1 i++
是相同的但后来我会增加j-- + i++
因此产生与j + i
相同的结果(除了j和i也被更改)。j
会递减,因此j += j-- + i++
等于j = (j - 1) + (j + i)
请注意,顺序很重要,即j + j--
产生的结果与j + j
相同,但j-- + j
的结果为j + j - 1
(因为j返回,然后递减,然后补充说。)
至于代码的其余部分,只需看看变量在一段时间内是如何变化的。我将扩展你的第二个例子:
for (j = 0, i = 0; j < 10; j = j + i, i++)
j += j;
循环用0初始化j,每次迭代首先加倍j(j += j
)然后加i并递增i(j = j + i, i++
)。
因此,迭代1将产生j = 0 + 0 + 0 = 0
。 (我现在是1)
迭代1将产生j = 0 + 0 + 1 = 1
。 (我现在2岁)
迭代2将产生j = 1 + 1 + 2 = 4
。 (我现在3岁)
迭代3将产生j = 4 + 4 + 3 = 11
。 (我现在4岁)
答案 2 :(得分:0)
+ =非常容易理解。基本上,右手上的任何内容都会被添加到左侧的任何内容中。
它的预增量和后增量可能令人困惑。基本上,预增量将为值加1,然后按优先顺序执行其他操作,而后增量将按优先顺序执行其他操作,然后再增加。
所以例如
int i = 1;
int j = 1;
int k = 2;
i += j++ + k++;
System.out.println("i: " + i);
/* i is 4 because it added the value of j BEFORE incrementing j(value of 1)
* and added the value of k *BEFORE incrementing k(value of 2) After the values
* have been added to i, they then become 2 and 3 respectively
*/
System.out.println("j: " + j);
//j was one, but is now 2 because it incremented after adding its value to i
System.out.println("k: " + k);
//k was two, but is now 3 because it incremented after adding its value to i
i = 0; //reset i to 0 but leave k at 3, then...
i += ++k;
System.out.println("i: " + i);
//i is now 4 because k was pre-incremented from 3 to 4 BEFORE assigning its value to i
i = 0; //reset i to 0 again
i += k++;
System.out.println("i: " + i);
//i is still 4 because k post-incremented AFTER assigning its value to i