Java +;=操作人员
我有一个关于Java +;=操作人员,java,javascript,operators,Java,Javascript,Operators,我有一个关于+=操作符的问题。 我的任务是检查j末尾有哪个值。现在,我已经通过Java运行了它,并得到了结果,但我并不真正了解解决方案是如何结合在一起的。我希望有人能向我解释它是如何建立的: (一) 解决方案:j=32 (二) for(j=0,i=0;j
+=
操作符的问题。
我的任务是检查j
末尾有哪个值。现在,我已经通过Java运行了它,并得到了结果,但我并不真正了解解决方案是如何结合在一起的。我希望有人能向我解释它是如何建立的:
(一)
解决方案:j=32
(二)
for(j=0,i=0;j<10;j=j+i,i++)
j+=j;
解决方案:j=11
(三)
for(i=0,j=10;i<10&&j>5;i++)
j+=j--+i++;
解决方案:j=372
j += j;
与
j = j + j;
也就是说,它增加了j,在“+=”之后的所有内容,所以
j += j + j-- + i++;
与
j = j + (j--) + (i++);
或
让我们展开j+=j--+i++
返回j的值并随后递减j,即如果j为2,则返回2,之后j为1j--
是相同的,但i随后递增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;
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岁了)这个+=真的很容易理解。基本上,右手边的东西加在左手边的东西上
可能是增量前和增量后会混淆。基本上,增量前会将一个操作添加到值中,然后按优先级顺序执行其他操作,而增量后会在增量前按优先级顺序执行其他操作
比如说
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
Java还是Javascript?挑一个,取下另一个的标签,写在纸上,自己看看。做电脑。如果你写的东西像
j+=j--+i++
你应该为此付出所有的痛苦。@MarcB有史以来对SO最好的评论。@musefan:虽然这种情况发生了,但在这种情况下,这并不重要。但是,是的,最好不要(进一步)混淆这两种基本不相关的语言AFAIKj=j+(j--)+(i++)
将等于j=j+j+i-1
(i在此之后递增)(j-)在这种情况下不等于(j-1)。它递减j,但返回未递减的值。我显然没有注意,谢谢你的更正。你当然是对的,谢谢!第一个任务的解决方案不是简单的是:j=1+1=2结果显示是32,但这个计算中甚至没有“我”,对吗?太好了,我想我现在知道了,谢谢!很好的解释,非常感谢!感谢您的解释:)
j = j + (j--) + (i++);
j = j + j + i; //the ++ adds one to i and the -- takes one from j after this statement has ran
for (j = 0, i = 0; j < 10; j = j + i, i++)
j += j;
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