Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java +;=操作人员_Java_Javascript_Operators - Fatal编程技术网

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,即如果j为2,则返回2,之后j为1
  • 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:虽然这种情况发生了,但在这种情况下,这并不重要。但是,是的,最好不要(进一步)混淆这两种基本不相关的语言AFAIK
j=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