【问题标题】:loop's counter i as I++ vs. i+1 as position in an array循环的计数器 i 作为 I++ 与 i+1 作为数组中的位置
【发布时间】:2009-12-15 12:35:02
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: java


    【解决方案1】:
    • array[i++] 将评估 array[i] 并增加 i
    • array[++i] 将增加 i 并且 然后 评估 array[i](因此它会为您提供下一个元素)
    • array[i+1] 会给你下一个元素而不增加 i

    就我个人而言,我尽量避免使用这样的副作用 - 这意味着当我稍后阅读代码时,我总是必须放慢速度以确保我以正确的顺序获得所有内容。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我知道,但是为什么 ++i(i 加一的副本)不能像 i+1 那样工作,即 i 加一的值?
      • 这仍然取决于您的代码。展示它,我们可以告诉你它有什么问题。
      • @baruch1mekonen:因为当使用++i 时,i 会递增 1,并且它可能也会在循环中第二次递增。所以下次你使用它时,它会增加 2 而不是 1。 i+1 产生相同的值但不增加(i 的内容)。
      【解决方案3】:

      array[i++] 将给您与array[i] 相同的值,然后增加iarray[++i] 将为您提供与 array[i+1] 相同的值并增加 iarray[i+1] 实际上不会改变 i 的值。

      【讨论】:

        【解决方案4】:
        • i++:将i中存储的值加一,返回旧值。
        • ++i:将i中存储的值加一,返回新值。
        • i+1:返回i1之和,不改变i中存储的值

        现在考虑一下,如果我怀疑你的代码看起来像

        for ( i = 0; i < something; i++ )
        {
           dosomething(i++);
        }
        

        传递给dosomething()i 的值将是 0 2 4 8 . .

        由于循环的每次迭代,ifor() 行中增加一次,在dosomething() 行中增加一次,并且dosomething() 调用被赋予i 在增加之前的值。如果实际需要的行为是使用序列调用 dosomething() 1 2 3 4 . . 那么你需要避免更新i,结果是在循环体中添加1: 对于 ( i = 0; i

        甚至

        for ( i = 1; i < (something+1); i++ )
        {
           dosomething(i);
        }
        

        【讨论】:

          【解决方案5】:

          array[i++] 表示“取索引为 i 的数组元素,然后递增 i”。 array[i+1] 表示“取索引为 i+1 的数组元素,不要修改 i”。

          【讨论】:

            【解决方案6】:

            无法正常工作,因为您在每个循环中将 i 递增两次。

            因此,如果您的数组是 {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”

            最好远离循环计数器上的++,除非你是认真的。

            【讨论】:

              【解决方案7】:

              让我们定义i=0,然后

              • i++ 将返回 0,然后将 i 增加到 1
                (后递增:返回值,之后递增)
              • ++i 将增加 i1 然后返回 1
                (增加前:增加,之后返回值)
              • ì+1增加 i 并返回 1
                (补充:只返回结果,不接触变量)

              我假设,你不想自己增加 i,只加 1 以访问具有不同偏移量的索引。

              【讨论】:

                猜你喜欢
                • 2014-08-09
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-07-05
                • 1970-01-01
                • 2012-10-26
                • 1970-01-01
                相关资源
                最近更新 更多