【问题标题】:Basic Incrementation基本增量
【发布时间】:2012-06-14 14:28:24
【问题描述】:

我知道这是一个非常基本的问题,但是。

我理解背后的概念。 n++、++n、n--、--n。但是

public static void main(String[] args){

    int count = 1;
    for(int i =1;i<=10;++i){

    count = count * i;
    System.out.print(count);
    }
}

所以它会打印:1 2 3 4 5 6 7 8 9 10。

我的问题是。为什么如果 i 被递增为 ++i 时,我不会被视为 2,而不是 1。 Inst ++i 的点,在 i 被另一个操作操作之前递增它?

【问题讨论】:

标签: java loops for-loop increment


【解决方案1】:

++i 的意义是在 i 被另一个操作操作之前递增 i 吗?

++ii++ 之间的区别仅在用作更大表达式的一部分时才有意义,例如

int j = ++i; // Increment then use the new value for the assignment
int k = i++; // Increment, but use the old value for the assignment

在这种情况下,操作发生在循环的每次迭代结束时,独立。所以你的循环相当于:

int count = 1;
// Introduce a new scope for i, just like the for loop does
{
    // Declaration and initialization
    int i = 1;
    // Condition
    while (i <= 10) {
        count = count * i;
        System.out.print(count);

        // Now comes the final expression in the for loop "header"
        ++i;
    }
}

现在最后将++i 更改为i++ 根本不会产生任何影响 - 表达式的值不会用于任何事情。

【讨论】:

  • 好的,这样可以校准 int j = ++i; // 递增,但使用旧值进行赋值 int k = i++; // 递增然后使用赋值的新值.....意思是 j= i+1 但 k=j?
  • @user1419012:假设每个语句是分开的(而不是把两个放在一起考虑),j 在赋值后将比i 少1 ,但@987654329 @ 和 i 将具有相同的值。
  • j 比 i 多一个吗?我同意 k 将具有与 i 相同的值。
  • @Palak:如果您认为某个答案是错误的,请投反对票/发表评论,而不是仅仅偏离初衷编辑答案。 (在这种情况下,是的,您在第一部分是正确的,但是对于原作者来说,修复这个问题仍然是合适的,而不是让编辑这样做。编辑是为了澄清拼写错误等,而不是改变帖子的语义。 )
  • 好的@Jon Point 注意到了。
【解决方案2】:

直到for 循环的第一次迭代之后才会调用增量。

这是真的

j = i++;
k = ++i;

返回不同的结果,将本文中的 ++i 视为在每个 for 循环结束时调用的独立行。

【讨论】:

    【解决方案3】:

    您想使用 i++,它是一个后增量。 ++i 被称为预增量,差异正是您所指出的。

    【讨论】:

    • 我相信 ++i 在以这种方式使用时实际上对内存更有效。然而,最终结果是一样的。
    • @user1432824 你是说循环不能使用预增量吗?
    • 不,戴夫,我知道两者都会起作用..我只是想知道在这种情况下两者之间的区别是什么。 :)
    • @user1419012 不同的用户,伙计。
    • @SimplyPanda:编译器可能会优化掉多余的变量。
    【解决方案4】:

    在这种情况下,++i 发生在循环结束时,它会递增,然后检查新值是否仍然满足终止条件。

    另外,输出不会是:

    count   i  
    1   *   1 = 1
    1   *   2 = 2  
    2   *   3 = 6   
    6   *   4 = 24  
    

    等等

    【讨论】:

      【解决方案5】:

      你写的for循环是这样的:

      i = 1;
      while(i<=10) {
        count = count * i;
        System.out.print(count);
        i = i + 1;
      }
      

      这就是为什么!

      【讨论】:

        【解决方案6】:

        对于 i = 0 并且当 i

        这里试试这个:

        int i=1;  
        while(i <= 10)  
          System.out.print(++i);  
        
        
        i = 1;  
        while (i <= 10)  
          System.out.print(i++);
        

        【讨论】:

          【解决方案7】:

          作为其他答案的补充,选择 for(int i=1;i&lt;=10;++i) 而不是 for(int i=1;i&lt;=10;i++) 的历史原因是 ++i 不需要将 i 的旧值存储在一个额外的变量中。因此,++ii++ 快,尽管速度提升可以忽略不计。在现代编译器上,这种速度改进是作为一种优化完成的,因此这两个部分产生相同的编译器输出。然而,由于++i 总是与i++ 一样快或更快(例如,在旧的C++ 编译器上),许多有经验的程序总是在循环中使用++i

          正如其他答案所述,两段代码在功能上是等效的(在 for 循环的情况下)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-02-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-06
            • 1970-01-01
            相关资源
            最近更新 更多