我有这样的代码:为什么for循环工作
int k;
for (k=0; k>-3; k=-2;); {
System.out.println(k);
}
输出为负四强。我不明白为什么这个代码仍然运行,即使在for循环中的语句之后有一个分号。
我有这样的代码:为什么for循环工作
int k;
for (k=0; k>-3; k=-2;); {
System.out.println(k);
}
输出为负四强。我不明白为什么这个代码仍然运行,即使在for循环中的语句之后有一个分号。
你的if条件后有一个;
分号。因此,您的情况会立即终止,并且由{
和}
分隔的下一个块将在100%的时间内执行。
更改此
for (k=0; k>-3; k=-2;);
对此
for (k=0; k>-3; k=-2;)
正如其他人所指出的评论中,有环路问题的顶部的几个问题。首先,第三个分号是语法错误。其次,它应该是k-=2
而不是k=-2
,否则循环将永不结束。
一旦这些被清除,这段代码就相当于:
int k;
for (k=0; k>-3; k-=2);
{
System.out.println(k);
}
这是一样的:
int k;
for (k=0; k>-3; k-=2);
System.out.println(k);
这是一样的:
int k;
for (k=0; k>-3; k-=2) {
}
System.out.println(k);
通过使用for循环之后的分号,你要求一个for循环,什么都不做。在System.out.println(k)
之后的括号只是正常的括号。即使没有for
循环,您也可以在自己的范围内放置任何代码。
循环并不实际运行。嗯,它确实,但不是代码中的循环。下面是会发生什么:
int k;
for(k=0; k>-3; k-=2;); // <-- this line is what is repeated
接下来,它打印System.out.println
声明,该声明将打印k
(-4)。
您怀疑循环体为空。它运行完成,有两个完整的迭代(0,-2)。之后,k的值是-4,所以循环退出。然后,你有一个匿名块只能执行一次,就像任何正常的语句一样。该块包含您的println,它显示循环后k的值,这是您的负四。
你的代码是可擦写的
int k;
for (k=0; k>-3; k=-2;)
{
// do nothing
}
System.out.println(k);
,但可能你想获得somewthing这样的:{
编辑 djechlin的评论前后
int k;
for (k=0; k>-3; k-=2) {
System.out.println(k);
}
没有;
:不错赶上!
你的代码不会做你说的那样。真的,试试吧。你可能打算输入减号(-=
)而不是等于减号(=-
)。
接下来,删除for循环后面的分号。请参阅其他5个解答。
太棒了!我完全错过了它:D –
谢谢!这是一个错字。我正在审查一个旧的考试,所以我想知道这个问题背后的逻辑。我尝试没有半结肠。 – eckela
你确定它是'k = -2'而不是'k- = 2'吗?第一个输出什么都没有,第二个输出负四。 – DJMcMayhem
我在辩论是否downvote所有的答案,错过了... – djechlin
是啊,'k = -2'会给你一个无限循环,因为'k'总是'== -2'这是'> - 3' ... –