以下for循环与原始循环有何不同?
为什么在初始化之后,会检查条件?
为什么这样的行为以及for
循环的其他如此棘手的行为是什么?
class FooBar
{
static public void main(String... args)
{
for (int x = 1; ++x < 10;)
{
System.out.println(x); // it starts printing from 2
}
}
}
输出:
2
3
4
5
6
7
8
9
答案 0 :(得分:3)
++x
会增加x
的值。结果,发生了两件事:
如果您想要1到9之间的值,请使用标准循环:
for (int x = 1; x < 10; ++x) { ... }
前缀和后缀运算符的效果已经在其他地方进行了详细讨论和解释,例如this post。
答案 1 :(得分:2)
x
的增量与条件相结合。通常,增量是在for
循环的第三部分中执行的,这是在迭代结束时执行的语句。
但是,在循环的开头处检查条件。它是一种表达,而不是一种陈述,但正如你所看到的,这并不能阻止某人插入副作用 - x
的预增量。
由于x
以1
开头,因此条件会在第一次迭代之前将其增加到2
。
答案 2 :(得分:1)
这不是for-loop trickery,它是您在x
上使用的前缀和后缀运算符的工作方式。
++x
- 递增x然后评估其值
x++
- 评估x的值然后递增它。
所以,这个定义的循环:
for (int x = 1; ++x < 10;)
执行如下:
你想要的是这个:
for (int x = 1; x < 10; x++)
答案 3 :(得分:1)
每个for-loop
(增强for循环除外)具有以下结构 -
for(initialization; conditionChecking; increment/decrement){
//body
}
您的for-loop
也有此结构,incremetn/decrement
部分为空。但要继续for循环,您必须更改x
的索引(此处for-loop
)。如果完成某些操作,那么您可以将increment/decrement
部分留空。如果你像这样写for-loop
那么它也没关系 -
for(int x=0; x<10; ){
//do something
x++;
}
您也可以将for-loop
的一个/多个部分(甚至是正文)留空,如下所示 -
int x=0;
for(;x<10;x++); //empty body; do nothing; just increment x
答案 4 :(得分:1)
for循环有效,其中一个或多个部分留空。
在您的代码中,增量部分为空。您已使用x
完成了索引++x>10
的增量。所以它是有效的。与常规for循环没有区别,它只是一种以不同方式表示for循环的方式。
答案 5 :(得分:1)
你可能想到的for循环的原始方式:
for(initialization; condition; inc/dec/divide..)
你提到了什么:for (initialization; Inc & check; nothing)
这是什么意思? :for(some blaBla; any Bla; some, more, bla)
你可以在任何地方有任何表达。原始版本只是我们遵循的惯例。继续写一个打印语句或一个按位运算符而不是some blaBla
尝试一下!
更新:
为什么:
for (int x = 1; x++ < 10;)
{
System.out.println(x);
}
打印2..10?对于答案,首先尝试执行:
for (int x = 1; ++x < 10;)
{
System.out.println(x);
}
它从2..9打印
您应该了解前/后修复操作符的工作原理。循环中的x++
会递增值,但不会立即递增。它在x++ < 10;
之后递增
在++x < 10;
首先递增然后休息时,一切都会发生。
因此,当x值为9时,9(++)&lt; 10 - &gt; 9少了?是的,现在9 ++发生。然后增加x。但++ x增加1,所以++ 9&lt; 10 - &gt; 10&lt; 10 NO。
答案 6 :(得分:1)
您可以将代码编写为:
x = 1;
while (++x < 10)
{
System.out.println(x);
}
您期望以下内容:
x = 1;
do
{
System.out.println(x);
}
while (++x < 10);
这就是区别。
以下是您所期望的:
for (int x = 1; x < 10; x++)
{
System.out.println(x);
}
答案 7 :(得分:0)
TL; DR 全部是++x
是预增量运算符。当您使用++x
时,x将在任何其他联合操作之前递增。这就是为什么你的代码首先输出2而不是1,并在++x
变为10