1

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

我理解背后的概念。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 不是 i 然后被视为 2,而不是 1。 Inst ++i 的点,在 i 被另一个操作操作之前递增它?

4

7 回答 7

11

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

++i和之间的区别i++仅在用作更大表达式的一部分时才重要,例如

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;
    }
}

现在更改++ii++最后没有任何区别 - 表达式的值不用于任何事情。

于 2012-06-14T14:30:40.970 回答
3

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

虽然这是真的

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

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

于 2012-06-14T14:30:11.443 回答
0

您编写的 for 循环与以下内容相同:

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

所以这就是为什么!

于 2012-06-14T14:31:53.290 回答
0

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

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

于 2012-06-14T15:40:26.683 回答
0

对于 i = 0 且当 i < 1= 10 时,打印 i,然后预递增 i。(++i/i++ 在这里没有区别)。

这里试试这个:

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


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

于 2012-06-14T14:39:17.910 回答
0

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

于 2012-06-14T14:30:17.847 回答
0

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

另外,输出不会是:

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

等等

于 2012-06-14T14:31:03.050 回答