我正在尝试以下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]
,但事实并非如此。
任何人都可以解释输出吗?
答案 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
的新值)得到评估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;因为它涉及操作的顺序。