我知道这是一个非常基本的问题但是。
我理解背后的概念。 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增加为++我不是因为我被视为2而不是1.设为++ i的点,在被另一个操作操纵之前增加i?
答案 0 :(得分:11)
++ 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;
}
}
现在最后将++i
更改为i++
根本不会产生任何影响 - 表达式的值不会用于任何事情。
答案 1 :(得分:3)
直到for
循环的第一次迭代后才调用增量。
虽然这是真的
j = i++;
k = ++i;
返回不同的结果,将此上下文中的++i
视为在每个for
循环结束时调用的独立行。
答案 2 :(得分:0)
你想使用i ++这是一个后增量。 ++我被称为preincrement,其差异正如你所指出的那样。
答案 3 :(得分:0)
在这种情况下++i
发生在循环结束时,它会递增,然后检查新值是否仍然符合终止条件。
此外,输出不会是:
count i
1 * 1 = 1
1 * 2 = 2
2 * 3 = 6
6 * 4 = 24
等
答案 4 :(得分:0)
你写的for循环与:
相同i = 1;
while(i<=10) {
count = count * i;
System.out.print(count);
i = i + 1;
}
所以这就是原因!
答案 5 :(得分:0)
对于i = 0而I <0。 1 = 10, 打印我, 然后预先增加i。 (++ i / i ++在这里没有区别。)
这里试试这个:
int i=1;
while(i <= 10)
System.out.print(++i);
i = 1;
while (i <= 10)
System.out.print(i++);
int i=1;
while(i <= 10)
System.out.print(++i);
i = 1;
while (i <= 10)
System.out.print(i++);
答案 6 :(得分:0)
作为对其他答案的补充,偏好for(int i=1;i<=10;++i)
优于for(int i=1;i<=10;i++)
的历史原因是++i
不需要将i
的旧值存储在额外的变量。因此,++i
比i++
快,但速度提升可以忽略不计。在现代编译器中,这种速度改进是作为优化完成的,因此这两个部分产生相同的编译器输出。但是,由于++i
始终与i++
一样快或更快(例如,在旧的C ++编译器上),因此许多有经验的程序总是在循环中使用++i
。
正如其他答案所述,两段代码在功能上是等价的(在for循环的情况下)。