+ =运算符

时间:2013-11-22 14:35:56

标签: java javascript operators

我有一个关于+=运算符的问题。 我的任务是检查最后的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

3 个答案:

答案 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