繁体   English   中英

前/后增量运算符和数组

[英]Pre/Post increment operators and arrays

我正在尝试以下Java代码段:

int[] testArray={10,20,30,40};
int i= 0;
testArray[i++]= testArray[i++]+1;

System.out.println("The value of i: "+i);

for(int i1=0;i1<testArray.length;i1++)
{
    System.out.println(testArray[i1]);
}

当i = 0时,数组的输出值为: 21, 20,30,40

我无法理解此输出,因为输出应为: 10, 11, 30, 40

testArray[0]+1将为11 ,然后将其分配给testArray[1]但事实并非如此。 有人可以解释输出吗?

在以下作业中:

testArray[i++] = testArray[i++] + 1;

首先,对i++的值求值,结果为0 然后, i的值增加。 因此,在RHS开始评估之前, i的值已变为1 因此,基本上,以上表达式等效于:

testArray[0] = testArray[1] + 1;

在上面的表达式之后, i的值为2 但是,如果将表达式更改为:

testArray[i] = testArray[i++] + 1;

..您将获得预期的结果。

当您这样做时:

testArray[i++] = testArray[i++] + 1;

这里发生很多事情。

  • test[i]被评估
  • i越来越
  • testArray[i]新的值i )被评价
  • 1被添加到testArray[i]
  • 结果被分配回testArray[i] (再次是new i )。

您可能想做的是:

testArray[i] = testArray[i++] + 1;

这个:

int i= 0;
testArray[i++]= testArray[i++]+1;

等效于:

int i= 0;
testArray[0]= testArray[1]+1;

等效于:

int i= 0;
testArray[0]= 20 + 1;

后递增运算符正在增加int的值,导致它拉动表达式中索引1中的元素,该索引== 20。显然,随后的加法将得出值21,然后将其分配给的索引0。数组。

换句话说,它与您的代码描述有关。 您没有使用假设的数组索引。

原因是因为当您编写该行时

testArray[i++]= testArray[i++]+1;

您首先使用

testArray[i++]

您访问数组的第一个条目,因此为testArray [0]。 通话结束后,我会升至1。

testArray[i++]+1

您可以在testArray [1]处获得该值(所以20),并将其加1。

这个:

这个:

int i= 0;
testArray[i++]= testArray[i++]+1;

***“执行此代码后,i == 2”

诸如此类的语句就是操作的顺序。 [ ]优先级高于++ ,因此testArray[i++]意思是在索引i处输入数组,执行您要执行的所有操作,然后递增i。 即使它对您要完成的任务毫无用处,但在任务右侧完成所有操作后,最后发生的事情是我再次“递增”:)

最初, i=0

testArray[i++] = testArray[i++]+1;

对于左侧的表达式:

testArray[0] (整数值10)是我们输入数组的地方(最终结果在这里!)。 然后,我增加到1

“等于”

对于右侧的表达:

使用我们新增加的i变量...

testArray[1] (即整数值20)添加到文字整数值1,然后将结果(即21)存储在testArray[0]. 最后,右侧表达式中的i增加到2。

或者,我们可以说:

i=0;
testArray[i] = testArray[i+1] + 1;

但是说实话,那有什么乐趣呢?

只是为了练习,请在i上使用前缀符号编写相同的代码段,然后看看会发生什么! 然后阅读与操作顺序相关的“关联性”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM