前/后增量运算符和数组

时间:2013-11-25 12:27:06

标签: java 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],但事实并非如此。 任何人都可以解释输出吗?

5 个答案:

答案 0 :(得分:5)

在以下作业中:

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

首先评估i++的值,结果为0。然后i的值递增。因此,在RHS开始评估之前,i的值已变为1。所以,基本上,上面的表达式相当于:

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

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

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

..你会得到预期的结果。

答案 1 :(得分:1)

当你这样做时:

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

这里发生了很多事情。

    评估
  • test[i]
  • i增加
  • testArray[i]i的新值)得到评估
  • 1已添加到testArray[i]
  • 结果已分配回testArray[i](再次,新i)。

您可能想要做的是:

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

答案 2 :(得分: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。显然,后续添加将使值然后,将其分配给数组的索引0。

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

答案 3 :(得分:1)

原因是当你写行

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

首先使用

访问数组
testArray[i++]

你访问数组的第一个条目,所以testArray [0]。在此呼叫之后,我增加到1。 当你说

testArray[i++]+1

你得到testArray [1]的值(所以20)并加1。

答案 4 :(得分:-1)

此:

此:

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

***&#34;执行此代码后,i == 2&#34;

关于这样的陈述的事情是操作的顺序。 [ ]的优先级高于++,因此testArray[i++]表示在索引i处输入数组,执行您要做的任何操作,然后递增i。 即使它对你想要完成的事情没有任何意义,但是在任务完成后,最后一件事情就是我会再次增加&#34;再次#34; :)

最初,i=0

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

表示左侧的表达式:

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

&#34;等于&#34;

表示右侧的表达式:

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

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

或者,我们可以说:

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

但老实说,那里的乐趣在哪里?

只是为了练习,在i上使用前缀表示法编码相同的片段,看看会发生什么! 然后阅读&#34;关联性&#34;因为它涉及操作的顺序。