循环计数器i作为I ++与i + 1作为数组中的位置

时间:2009-12-15 12:35:02

标签: java

我用i做了一个循环,因为它是计数器变量 在那个循环中,我正在比较一个数组的单元格 我想知道array [i ++](或array [++ i])与array [i + 1]之间有什么区别。
因为i ++(或++ i)不能按照想要的方式工作,而i + 1(一个让我疯狂的小包)。

提前致谢。

7 个答案:

答案 0 :(得分:15)

  • array[i++]将评估array[i]并增加i
  • array[++i]会增加i然后评估array[i](因此它会为您提供下一个元素)
  • array[i+1]会在不增加i
  • 的情况下为您提供下一个元素

就我个人而言,我试图避免使用这样的副作用 - 这意味着当我稍后阅读代码时,我总是要放慢脚步以确保我按照正确的顺序获得所有内容。

如果您已经处于递增i的循环中,那么在数组访问表达式中递增i以及将意味着每个循环迭代将递增{ {1}}两次。

答案 1 :(得分:7)

i++++ii+1都是不同的表达式(或操作)。您应该查阅您最喜欢的Java参考,以了解其中的差异。

(简而言之:i++递增i但返回原始值++i递增i并返回新值,i+1不递增{ {1}}但返回i的值。)

至于为什么你的循环不能按照你期望的方式工作:如果没有实际看到你的代码就无法回答 - 这是非常合乎逻辑的。我的假设是您使用了错误的表达式和/或每个循环增加i+1两次。

答案 2 :(得分:2)

array[i++]将与array[i]相同,然后递增iarray[++i]将与array[i+1]相同,并增加iarray[i+1]实际上不会更改i的值。

答案 3 :(得分:1)

  • i++:将i中存储的值增加1,然后返回旧值。
  • ++i:将i中存储的值增加1,然后返回新值。
  • i+1:返回i1的总和,而不更改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就可以访问具有不同偏移量的索引。