我用i做了一个循环,因为它是计数器变量
在那个循环中,我正在比较一个数组的单元格
我想知道array [i ++](或array [++ i])与array [i + 1]之间有什么区别。
因为i ++(或++ i)不能按照想要的方式工作,而i + 1(一个让我疯狂的小包)。
提前致谢。
答案 0 :(得分:15)
array[i++]
将评估array[i]
并增加i
。array[++i]
会增加i
和然后评估array[i]
(因此它会为您提供下一个元素)array[i+1]
会在不增加i
就我个人而言,我试图避免使用这样的副作用 - 这意味着当我稍后阅读代码时,我总是要放慢脚步以确保我按照正确的顺序获得所有内容。
如果您已经处于递增i
的循环中,那么在数组访问表达式中递增i
以及将意味着每个循环迭代将递增{ {1}}两次。
答案 1 :(得分:7)
i++
,++i
和i+1
都是不同的表达式(或操作)。您应该查阅您最喜欢的Java参考,以了解其中的差异。
(简而言之:i++
递增i
但返回原始值++i
递增i
并返回新值,i+1
不递增{ {1}}但返回i
的值。)
至于为什么你的循环不能按照你期望的方式工作:如果没有实际看到你的代码就无法回答 - 这是非常合乎逻辑的。我的假设是您使用了错误的表达式和/或每个循环增加i+1
两次。
答案 2 :(得分:2)
array[i++]
将与array[i]
相同,然后递增i
。 array[++i]
将与array[i+1]
相同,并增加i
。 array[i+1]
实际上不会更改i
的值。
答案 3 :(得分:1)
i++
:将i
中存储的值增加1,然后返回旧值。++i
:将i
中存储的值增加1,然后返回新值。i+1
:返回i
和1
的总和,而不更改i
现在考虑如果我怀疑你的代码看起来像是
会发生什么for ( i = 0; i < something; i++ )
{
dosomething(i++);
}
传递给i
的{{1}}的值将是
0
2
4
8
。
由于循环的每次迭代,dosomething()
在i
行中增加一次,在for()
行中增加一次,dosomething()
调用的值为dosomething()
{1}}之前已经增加了。如果实际需要的行为是用序列调用i
1
2
3
4
。
。
那么你需要避免更新dosomething()
,结果是在循环体中添加1:
for(i = 0; i&lt; something; i ++)
{
DoSomething的第(i + 1);
}
甚至
i
答案 4 :(得分:0)
array[i++]
表示“使用索引i获取数组元素,然后递增i”。
array[i+1]
表示“使用索引i + 1获取数组元素,不要修改i”。
答案 5 :(得分:0)
无法正常工作,因为您在每个循环中递增两次。
因此,如果您的数组是{1,2,3,4,5,6,7}
并且从i = 0开始打印array[++i]
,它将打印“2,4,6”,然后抛出ArrayOutOfBoundsExcpetion
,如果数组是{1,2,3,4,5,6,7,8}
它将打印“2,4,6,8”
最好远离循环计数器上的++
,除非你真的是这个意思。
答案 6 :(得分:0)
让我们定义i=0
,然后
i++
将返回0
,然后将i
增加到1
++i
会将i
增加到1
,然后返回1
ì+1
不增加i
并返回1
我假设你不想单独增加i,只需加1就可以访问具有不同偏移量的索引。